Php 将.htaccess应用于所有子目录
我有以下目录结构:Php 将.htaccess应用于所有子目录,php,apache,.htaccess,mod-rewrite,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_FILENAM
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/folder1
或localhost/root/folder1/foldera/filephp
它不起作用。是否需要定义其他规则才能使其生效?来自:
在.htaccess文件中找到的配置指令应用于找到.htaccess文件的目录及其所有子目录。但是,还必须记住,在更高的目录中可能有.htaccess文件。指令按找到它们的顺序应用。因此,特定目录中的.htaccess文件可能会覆盖目录树中较高位置的.htaccess文件中的指令。而这些,反过来,可能已经超越了更高层次的指令,
或者在主服务器配置文件本身中
如果htaccess位于根目录中,为什么使用“../”?目前,它正在重定向到根目录上方的index.php
如果希望它对所有请求都有效,请删除两个重写条件。现在的意思是:“仅当请求不针对存在的文件或目录时才重写请求”。如果您不希望直接访问其他文件夹中的文件,则将其完全移出web根目录可能是有意义的。因此,您的前端控制器将位于
web/
子目录中,而web服务器的docroot将指向该子目录
root
folder1
foldera
file.php
folder2
folderb
web <- DocumentRoot should point here
.htaccess
index.php
根目录
折叠1
福尔德拉
file.php
折叠2
folderb
web您的规则仅在请求的路径不存在的情况下适用。我有一个API前端控制器,所有请求都将通过该控制器,无论给定路径是否有效。因此,请求不能直接访问路径。是否没有可以在根.htaccess上应用的规则,或者是否需要将.htaccess添加到每个子文件夹?抱歉,../是我运行的测试。.htaccess不应包括它。我更新了我的问题的准确性。这是有道理的。我将删除这两个重写条件。下面来自iainn的建议是一个很好的建议。htaccess的递归特性使得它很容易破坏东西。最好通过将不需要直接http访问的目录放在web根目录之外来避免这种可能性。