如何阻止对根文件夹中除 index.php 之外的所有 .php 的访问(通过 .htaccess)?
Posted
技术标签:
【中文标题】如何阻止对根文件夹中除 index.php 之外的所有 .php 的访问(通过 .htaccess)?【英文标题】:How to block access to all .php except index.php in root folder (via .htaccess)? 【发布时间】:2014-01-08 18:27:49 【问题描述】:注意:这个问题已经被问过好几次了,但答案真的很糟糕,完全错误和/或不符合上述情况(因为有几个文件名为 index.php) .如果您愿意,请参阅 [1]。
我想阻止通过根文件夹中的 .htaccess 文件直接访问 application 文件夹中的所有 .php 文件(参见文件结构图)。网上有一些解决方案,但他们漏掉了一件事:如果有多个名为 index.php 的文件(这是一个真实的场景,如屏幕截图所示,查看 view/xxx/ 文件夹中的文件):
问题:如何阻止对所有.php文件的访问,除了根文件夹中的index.php?
【问题讨论】:
很抱歉,如果您尝试过此操作,但您是否尝试过将所有内容移出文档根目录并让index.php
引用这些文件?
【参考方案1】:
在 .htaccess 中:
RewriteEngine on
RewriteRule ^/application - [F]
[F]
选项指示它对所有匹配的 URL 发出 403 Forbidden 响应。
或者在 /application
中添加一个单独的 .htaccess 文件,其中仅包含:
deny from all
或者在您的 Apache vhost 定义中:
<Location /application>
deny from all
</Location>
【讨论】:
这对我不起作用?这对任何人都有效吗?子目录中的 index.php 仍然可以访问。【参考方案2】:除了 Niels Keurentjes excellent answer 我想根据我的 .htacces 扩展他的解决方案,它使用一些非常常见的重写模式(因为很多人可能会遇到同样的问题) :
使用 URL 重写规则时,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]
【讨论】:
嗯,这似乎不像我想的那样工作......它还会阻止不在 application 文件夹中的文件。以上是关于如何阻止对根文件夹中除 index.php 之外的所有 .php 的访问(通过 .htaccess)?的主要内容,如果未能解决你的问题,请参考以下文章