仅允许使用 .htaccess 访问索引

仅允许使用 .htaccess 访问索引

我的 .htaccess 文件中,在站点根目录中有这个:

Options -Indexes
<directory ../.*>
Deny from all
</directory> 

<Files .htaccess>
order allow,deny
deny from all
</Files>

<Files index.php>
Order allow,deny
allow from all
</Files> 

我想要实现的是阻止对任何不叫 index.php 的内容的文件夹和文件访问,无论访问哪个目录。我的文件夹部分运行正常,拒绝所有规则也运行正常 - 但我尝试允许访问 index.php 失败了。

答案1

也许你想得太复杂了,只需拒绝所有访问,然后允许访问 index.php 和文件夹本身。例如:

Order allow,deny
Deny from All

<FilesMatch "^(index\.php)?$">
        Allow from All
</FilesMatch>

如果你甚至不想http://doma.in/folder/要使工作正常,您可以用 替换 FilesMatch 指令Files index.php。请记住,DirectoryIndex当访问没有文件名的文件夹时,显示什么文件取决于您的指令。

编辑:为了回答您评论中的问题,我认为您需要使用 mod_rewrite 的更强大的 .htaccess。根据 Apache 文档,您不能在 .htaccess 文件中使用 Directory 和 DirectoryMatch。由于在 RewriteRule 可以添加尾部斜杠之前请求被拒绝,因此您无法使用 mod_write 添加尾部斜杠。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !/index\.php$
    RewriteRule ^.*$ - [F]
</IfModule>

<IfModule !mod_rewrite.c>
    Order allow,deny
    Deny from All
</IfModule>

相关内容