提问人:VerySimple192347 提问时间:1/29/2023 最后编辑:RavinderSingh13VerySimple192347 更新时间:1/30/2023 访问量:190
第 403 页 禁止根目录用于 Deny from all in .htaccess
Page 403 Forbidden for root directory for Deny from all in .htaccess
问:
我在根目录中有下一个.htaccess
RewriteEngine on
RewriteRule ^$ index.php [L]
Order Deny,Allow
Deny from all
<Files index.php>
Allow from all
</Files>
并获取第 403 页禁止而不是 .www.example.com
www.example.com/index.php
URL 可用。www.example.com/index.php
关闭对根目录中所有文件的访问。这些文件由脚本生成,文件名是未知的。
如何解决?
答:
<Files index.php> Allow from all </Files>
请尝试以下操作:
<FilesMatch "^(index\.php)?$">
Allow from all
</FilesMatch>
更新:添加了错过的锚点!
(虽然我假设你使用的是 Apache 2.4,所以你应该使用相应的指令而不是 , 和 。Require
Order
Deny
Allow
或者,将所有现有指令替换为以下内容:
DirectoryIndex index.php
RewriteEngine On
RewriteRule !^(index\.php)?$ - [F]
这允许同时访问 和 。要阻止直接访问,请尝试以下操作:example.com/
example.com/index.php
index.php
RewriteRule ^[^/]+$ - [F]
mod_dir(即。“DirectoryIndex”) 在mod_rewrite后处理。
RewriteRule ^$ index.php [L]
此规则是多余的,应由其处理。DirectoryIndex
更新:
RewriteRule !^(index.php)?$ - [F] 有效,但我添加了 RewriteRule !^(index2.php)?$ - [F] 用于第二个文件 index2.php 并且它不起作用...我收到 403 错误 www.example.com/index2.php...我需要访问多个文件
通过添加另一条规则,它最终会阻止这两个 URL。因为一个或另一个规则总是成功的。
您可以在单个规则中使用正则表达式交替。例如:
RewriteRule !^(index\.php|index2\.php)?$ - [F]
在上面的容器中可以使用相同的正则表达式。<FilesMatch>
或者,如果有许多此类异常,则具有多个条件可能更具可读性。例如:
RewriteCond %{REQUEST_URI} !=index.php
RewriteCond %{REQUEST_URI} !=index2.php
RewriteCond %{REQUEST_URI} !=index3.php
RewriteRule !^$ - [F]
但是请注意,与原始规则一样,这也会阻止“子目录”中的 URL,而不仅仅是根目录。
评论
<FilesMatch "^(index\.php)?$">
index2.php
评论