服务器端包含(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)。确保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知道它应该停止这个重写循环。当请求被禁止时,我不认为它会开始一个新的重写周期,因为当被禁止的错误被发送时,没有脚本会被执行。
完成在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