拒绝直接访问除索引之外的所有.php文件.php

2022-08-30 08:13:28

我想拒绝直接访问除以下一个文件之外的所有文件:.phpindex.php

对其他文件的唯一访问应该是通过php。.phpinclude

如果可能的话,我希望所有文件都在同一文件夹中。

更新:

一般规则会很好,所以我不需要遍历所有文件。风险是我忘记了文件或行。

更新 2:

在文件夹中index.phpwww.myadress.com/myfolder/index.php

我想拒绝访问该文件夹中的所有文件和子文件夹。.phpmyfolder


答案 1

你确定,你想这样做吗?甚至css和js文件和图像和...?

好的,首先检查mod_access是否已安装到 apache 中,然后将以下内容添加到您的 .htaccess 中:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

<Files /index.php>
    Order Allow,Deny
    Allow from all
</Files>

第一个指令禁止访问除 localhost 之外的任何文件,因为 稍后应用 Allow,第二个指令仅影响索引.php。Order Deny,Allow

注意事项:订单行中的逗号后面没有空格。

要允许访问与 *.css 或 *.js匹配的文件,请使用以下指令:

<FilesMatch ".*\.(css|js)$">
    Order Allow,Deny
    Allow from all
</FilesMatch>

但是,不能对 .htaccess 文件使用指令或在 .htaccess 文件内部使用指令。<Location><Directory>

您的选择是使用第一个允许,拒绝组,然后显式允许访问索引.php。<FilesMatch ".*\.php$">

Apache 2.4 更新:这个答案对于 Apache 2.2 是正确的。在 Apache 2.4 中,访问控制范例已更改,正确的语法是使用 。Require all denied


答案 2

实际上,我带着与该主题创建者相同的问题来到这里,但给出的解决方案中没有一个是我的问题的完整答案。为什么要将代码添加到服务器上的所有文件中,而您只需配置一次即可?最接近的是Resideuum的那个,但是,当我想只排除未命名为index.php的php文件时,他仍然排除了所有文件。

所以我想出了一个包含这个的.htaccess:

<Files *.php>
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

(请记住,htaccess文件是递归工作的,因此它完全符合问题的先决条件。

我们开始吧。用户唯一可以访问的php文件将是名为index.php的文件。但是您仍然可以访问每个图像,css样式表,js脚本等。


推荐