服务器端包含(SSI)已在我的服务器上启用。但是,我不希望它在我的文件夹中执行。所以,我想添加一个 .htaccess 文件来禁用该文件夹中的 SSI。我该怎么做?我试过了
RemoveHandler server-parsed .shtml
但它不起作用。我如何实现它?
服务器端包含(SSI)已在我的服务器上启用。但是,我不希望它在我的文件夹中执行。所以,我想添加一个 .htaccess 文件来禁用该文件夹中的 SSI。我该怎么做?我试过了
RemoveHandler server-parsed .shtml
但它不起作用。我如何实现它?
首先,你的使用RemoveHandler
没有意义。文档说语法是RemoveHandler extension [extension] ...
,这意味着除了删除以 结尾的文件的处理程序之外.shtml
,您还删除了以 结尾的文件的处理程序server-parsed
。
处理程序是一种告诉 Apache 对于某些文件,它应该由其他程序解释的方法,而不是直接发送给用户。例如,文件结尾为的处理程序.php
将首先通过 php 解析器发送文件。删除此处理程序会将该文件中的 php 代码暴露给浏览器。据我所知实际上,如果配置正确,Apache 会.shtml
,文件不会被任何东西解释,因此删除这些文件不存在的处理程序对您没有任何帮助。.shtml
自己处理文件。这不是由处理程序完成的,而是由一些内部选项完成的。见这里。
您似乎想要做的是发送 HTTP 403: Forbidden 错误代码,当有人试图直接访问您的文件时。有一些方法可以实现这一点,例如使用mod_rewrite
( docs )。.htaccess
确保 mod_rewrite 已启用,然后在您的文档根目录中添加以下内容:
#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 知道它应该停止这个重写周期。我认为当请求被禁止时它不会开始一个新的重写周期,因为发送禁止错误时不会执行任何脚本。
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