阻止index.php除了在.htaccess的根目录之外

时间:2015-03-06 21:26:40

标签: php regex apache .htaccess webserver

我有一个像这样的文件夹结构:

subdir
|_ subsubdir
  |_ index.php
  |_ other_stuff.php
  |_ images
    |_ pic.jpg
.htaccess
config.ini
index.php

.htacces文件的内容:

Options +FollowSymLinks -MultiViews -Indexes

Order Deny,Allow
<FilesMatch "(\.ini$)|(\.php$)|(^\.)">
    Deny from all
</FilesMatch>
<Files index.php>
    Allow from all
</Files>

我的目标是阻止用户查看subdir / subsubdir / index.php(以及所有其他* .php文件,无论在哪里,但这已经有效)但允许他们查看索引.php在根目录中。

目前,用户显然仍然可以看到subdir / subsubdir / index.php,因为所有名为“index.php”的文件都是允许的,但我不知道如何允许只是一个在根目录中并拒绝所有其他目录。我尝试过不同的事情,但要么完全否定或允许所有事情。

我觉得这应该是一项非常简单的任务,但我无法理解。

我尝试过的事情:

<FilesMatch "\.\/index\.php">
    Allow from all
</FilesMatch>

---

<FilesMatch "^index\.php$">
    Allow from all
</FilesMatch>

---

<Files ./index.php>
    Allow from all
</Files>

---

<Files /index.php>
    Allow from all
</Files>

1 个答案:

答案 0 :(得分:4)

注释掉FilesMatch块:

并使用此代码:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteRule ^\.|\.(ini|php)$ - [F,NC]