2

我有一个包含各种 .php 文件的文件夹,我想防止直接访问它们,但要访问 index.php。

这是我到目前为止得到的,它似乎有效:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /403.php/$1 [R=403]
</IfModule>

这是正确的方法吗?另请注意,我在文件夹中的文件中实际上并不存在 403.php。

编辑:为了更好地阐明我想要做什么——我有一个文件夹(我们可以假设名为“includes”),其中包含一个 index.php 文件,以及 index.php 包含的各种其他文件。

我不希望用户/恶意机器人/任何人能够直接访问除 index.php 之外的“包含”中的任何内容。

如果他们到达其他任何东西(无论文件是否存在),我想向浏览器发送 403 - Access Denied HTTP 响应代码。

4

2 回答 2

2

正确的方法是使用F标志,它只是返回一个 403 禁止,你可以使用-它作为目标,它的意思是“什么都不做,让 URI 原封不动地通过”:

RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ - [L,F]

或者您可以尝试将条件与规则结合起来:

RewriteEngine on
RewriteRule !index\.php$ - [L,F]
于 2013-04-06T16:16:09.953 回答
1

您可以创建一个错误页面。实际上,一些控制面板有一个应用程序,允许他们的用户创建一个支持 SSI 的 403 (禁止)页面,扩展名为.shtml 。在该应用程序的cPanel中。标题为“高级”部分中的“错误页面”,403 页面将保存在403.shtml基本名称中。如果您没有找到此类应用程序,您可以手动创建启用 SSI 的 HTML 文件,前提是您的服务器配置为允许这样做。如果不可能,您仍然可以使用另一个扩展程序。

所以,更正确的方法是重新映射已经存在的错误页面,例如:

RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*) /403.shtml

但无论如何,你想做什么?

于 2013-04-06T18:39:37.590 回答