如何使用.htaccess禁用服务器端包含(SSI)

时间:2014-06-25 12:09:55

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

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

 RemoveHandler server-parsed .shtml

但它无法正常工作。我如何实现它?

1 个答案:

答案 0 :(得分:1)

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

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

您似乎想要做的是在有人试图直接访问您的文件时发送HTTP 403:Forbidden错误代码。有一些方法可以实现此目的,例如使用mod_rewritedocs)。确保启用了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知道它应该停止这个重写周期。我不认为在禁止请求时它会启动一个新的重写周期,因为在发送禁止错误时不会执行任何脚本。