【问题标题】:How to disable Server Side Includes (SSI) using .htaccess如何使用 .htaccess 禁用服务器端包含 (SSI)
【发布时间】:2014-08-15 23:52:54
【问题描述】:

服务器端包含(SSI)已在我的服务器上启用。但是,我不希望它在我的文件夹中执行。所以,我想添加一个 .htaccess 文件来禁用该文件夹中的 SSI。我该怎么做? 我试过了

 RemoveHandler server-parsed .shtml

但它不起作用。我该如何实现它?

【问题讨论】:

  • 我没有服务器配置文件的权限,所以我必须依赖.htaccess文件

标签: .htaccess security ssi server-side-includes shtml


【解决方案1】:

首先,您对RemoveHandler 的使用没有意义。 The documentation 表示语法为RemoveHandler extension [extension] ...,这意味着除了删除以.shtml 结尾的文件的处理程序之外,您还将删除以server-parsed 结尾的文件的处理程序。

处理程序是一种告诉 Apache 对于某些文件,它应该由其他程序解释的方法,而不是直接发送给用户。例如,以.php 结尾的文件的处理程序将首先通过 php 解析器发送文件。删除此处理程序会将该文件中的 php 代码暴露给浏览器。 据我所知.shtml 文件不会被任何东西解释,因此删除这些文件不存在的处理程序对您没有任何帮助。 实际上,如果配置正确,Apache 会小心.shtml 文件本身。这不是由处理程序完成的,而是由一些内部选项完成的。见here。

您似乎想要做的是在有人尝试直接访问您的文件时发送 HTTP 403: Forbidden 错误代码。有一些方法可以实现这一点,例如使用mod_rewrite (docs)。确保 mod_rewrite 已启用,然后将以下内容添加到文档根目录中的 .htaccess:

#We first need to make sure that we want to rewrite
RewriteEngine on

#Forbid access to all files ending with `.shtml`
RewriteRule \.shtml$ - [F,L]

由于内部包含不关心 mod_rewrite 的作用,所以它工作得很好。 RewriteRule 对匹配第一个参数的所有请求执行。第二个参数 (-) 表示 url 没有被重写。 F 标志让 Apache 知道发送 Forbidden 错误,L 标志让 mod_rewrite 知道它应该停止这个重写周期。我认为当请求被禁止时它不会开始一个新的重写周期,因为发送禁止错误时不会执行任何脚本。

【讨论】:

  • 谢谢@sumurai8 。抱歉,我的问题不清楚。我想允许访问 .shtml 文件,但我不希望执行其中的命令。(如包含、执行) .所以,我使用了删除处理程序,希望停止解析器。有没有办法做到这一点?
  • Options -Includes 应该可以做到我想的。我不知道你为什么首先将文件保存为 shtml。
【解决方案2】:

Complate 在 Apache Webserver 中关闭/禁用服务器端包含和 CGI​​ 执行:

解决方案:

关闭服务器端包含的步骤 (mod_include) 和 CGI​​ 执行 修改httpd.conf apache 主配置文件或.htaccess。 这可以应用于根目录或特定目录

Options -Indexes +FollowSymlinks -Includes -ExecCGI

如果你想在 .htaccess 中使用。在根目录 (public_html) 之前创建一个 .htaccess 并添加:

RewriteOptions InheritBefore
Options -Indexes +FollowSymlinks -Includes -ExecCGI

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2011-10-29
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多