如何阻止访问除根文件夹中的index.php之外的所有.php(通过.htaccess)?

时间:2013-12-20 00:34:38

标签: php apache .htaccess

  

注意:此问题已经多次被问过,但答案非常糟糕,完全错误和/或不符合上述情况(因为有几个名为 index.php 的文件) 。如果您愿意,请参阅[1]。

我想阻止通过根文件夹中的.htaccess文件直接访问 application 文件夹中的所有.php文件(请参阅文件结构图像)。网上有一些解决方案,但他们错过了一件事:如果有多个名为index.php的文件,它们不能正常工作(这是一个逼真的场景,如截图所示,看到view / xxx /文件夹中的文件:

问题:如何阻止访问所有.php文件,但根文件夹中的index.php除外?

enter image description here

2 个答案:

答案 0 :(得分:5)

在.htaccess中:

RewriteEngine on
RewriteRule ^/application - [F]

[F]选项指示它对所有匹配的网址发出 403 Forbidden 响应。

或者在/application中添加一个单独的.htaccess文件,其中包含:

deny from all

或者在您的Apache vhost定义中:

<Location /application>
  deny from all
</Location>

答案 1 :(得分:3)

除了 Niels Keurentjes excellent answer我想根据我的.htacces扩展他的解决方案,使用一些非常常见的重写模式(因为很多人可能遇到同样的问题)问题):

使用网址重写规则时,行RewriteRule ^/application - [F]必须在该位置。如果将线放在前面或下面,它将无法工作:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

# The new line, blocking direct access to every file in /application and deeper
RewriteRule ^/application - [F]

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]