0

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

 RemoveHandler server-parsed .shtml

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

4

2 回答 2

1

首先,你的使用RemoveHandler没有意义。文档说语法是RemoveHandler extension [extension] ...,这意味着除了删除以 结尾的文件的处理程序之外.shtml,您还删除了以 结尾的文件的处理程序server-parsed

处理程序是一种告诉 Apache 对于某些文件,它应该由其他程序解释的方法,而不是直接发送给用户。例如,文件结尾为的处理程序.php将首先通过 php 解析器发送文件。删除此处理程序会将该文件中的 php 代码暴露给浏览器。据我所知.shtml,文件不会被任何东西解释,因此删除这些文件不存在的处理程序对您没有任何帮助。实际上,如果配置正确,Apache 会.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 知道它应该停止这个重写周期。我认为当请求被禁止时它不会开始一个新的重写周期,因为发送禁止错误时不会执行任何脚本。

于 2014-06-25T15:09:25.737 回答
0

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
于 2021-12-18T15:21:21.293 回答