【发布时间】:2012-10-26 10:24:18
【问题描述】:
这本质上是 this question 的副本,但有一个警告:我想拒绝直接访问根目录下名为 index.php 的所有文件。
允许: /index.php
拒绝: /application/views/settings/index.php
我知道我可以使用 PHP 来查找已定义的常量或变量,但是否可以仅使用 .htaccess 来实现?这是我目前所拥有的:
##
# Disallow direct access to files.
#
<FilesMatch "^(.*)\.php$">
Order Deny,Allow
Deny from all
</FilesMatch>
<FilesMatch "^index\.php$">
Order Allow,Deny
Allow from all
</FilesMatch>
添加第三个FilesMatch 以拒绝"^(.*)/index/index\.php$" 不起作用。
【问题讨论】:
-
为什么要这样做?可能有更好的方法来实现您想要的。
-
它用于 MVC 应用程序。所有控制器在
/application/views内都有一个对应的目录,默认视图总是被命名为“index”。这没什么大不了的——我总是可以将它命名为“默认”或其他名称——但我只想知道 .htaccess 是否可以做到这一点。 -
所以你想防止 index.php 被直接调用?大多数框架这样做的方式是,他们在某处定义一个常量,然后在他们不想直接调用的每个文件中添加对该常量的检查:
if (!defined("CAN_RUN")) die ("This file can't be called directly."); -
是的,我知道。我只是认为这可以单独使用 .htaccess 来完成,并在每个文件中保存几行代码。
-
为了清楚起见,我倾向于把它放在 PHP 文件中。这是一个非常笨拙的 htaccess 规则;另外,如果您曾经使用与 Apache 不同的 Web 服务器,或者如果 Apache 未配置
AllowOverride All,它将无法工作。