将.htaccess应用于所有子目录

时间:2016-06-14 03:28:29

标签: php apache .htaccess mod-rewrite

我有以下目录结构:

root
    folder1
        foldera
            file.php
    folder2
        folderb
    index.php
    .htaccess

我想将所有请求路由到index.php并将其应用于所有文件夹。这是我的.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这似乎适用于localhost/root。请求已正确路由到index.php。但对于localhost/root/folder1localhost/root/folder1/foldera/filephp,它不起作用。我需要为此定义一个额外的规则吗?

2 个答案:

答案 0 :(得分:1)

来自:https://httpd.apache.org/docs/current/howto/htaccess.html

  

.htaccess文件中的配置指令将应用于找到.htaccess文件的目录及其所有子目录。但是,重要的是还要记住,目录中可能存在.htaccess文件。指令按照找到的顺序应用。因此,特定目录中的.htaccess文件可能会覆盖在目录树中较高位置的.htaccess文件中找到的指令。反过来,那些可能已被覆盖的指令更高,   或者在主服务器配置文件中。

如果您的htaccess位于root中,为什么' ../'?目前它正在重定向到根目录上方的index.php。

如果您希望它适用于所有请求,请删除两个重写条件。现在它说:"仅当请求不是针对文件或存在的目录时重写请求"。

答案 1 :(得分:1)

如果您不希望其他文件夹中的文件可以直接访问,那么将它们完全移出Web根目录可能是有意义的。因此,您的前端控制器将位于Select A.* From TableA A Where Not Exists ( Select 1 From TableJ J Join TableB B On B.id = J.B_id Where J.A_id = A.id And B.Name = 'Suzie' ) 子目录中,而网络服务器的docroot将指向该目录。

web/