第 403 页 禁止根目录用于 Deny from all in .htaccess

Page 403 Forbidden for root directory for Deny from all in .htaccess

提问人:VerySimple192347 提问时间:1/29/2023 最后编辑:RavinderSingh13VerySimple192347 更新时间:1/30/2023 访问量:190

问:

我在根目录中有下一个.htaccess

RewriteEngine on
RewriteRule ^$ index.php [L]
Order Deny,Allow
Deny from all
<Files index.php>
Allow from all
</Files>

并获取第 403 页禁止而不是 .www.example.comwww.example.com/index.php

URL 可用。www.example.com/index.php

关闭对根目录中所有文件的访问。这些文件由脚本生成,文件名是未知的。

如何解决?

apache .htaccess mod-rewrite 重写friendly-url

评论


答:

1赞 MrWhite 1/29/2023 #1
<Files index.php>
Allow from all
</Files>

请尝试以下操作:

<FilesMatch "^(index\.php)?$">
Allow from all
</FilesMatch>

更新:添加了错过的锚点

(虽然我假设你使用的是 Apache 2.4,所以你应该使用相应的指令而不是 , 和 。RequireOrderDenyAllow

或者,将所有现有指令替换为以下内容:

DirectoryIndex index.php

RewriteEngine On
RewriteRule !^(index\.php)?$ - [F]

这允许同时访问 和 。要阻止直接访问,请尝试以下操作:example.com/example.com/index.phpindex.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,而不仅仅是根目录。

评论

0赞 VerySimple192347 1/30/2023
<FilesMatch “(index\.php)?”>Allow from all</FilesMatch> 允许访问所有文件。我不需要它。
0赞 VerySimple192347 1/30/2023
RewriteRule !^(index\.php)?$ - [F] 有效,但我添加了 RewriteRule !^(index2\.php)?$ - [F] 用于第二个文件 index2.php 并且它不起作用...我收到 403 错误 www.example.com/index2.php...我需要访问多个文件
0赞 MrWhite 1/30/2023
@VerySimple192347 对不起,我错过了初始正则表达式上的点。它应该读作 .只需重复该规则将导致两个文件都被阻止。我已经更新了我的答案。<FilesMatch "^(index\.php)?$">index2.php
0赞 MrWhite 1/30/2023
@VerySimple192347 确认...这些规则也会阻止对子目录的请求(就像原始规则一样),而不仅仅是根目录。可以吗?