我的 .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>