Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将.htaccess应用于所有子目录_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

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根目录之外来避免这种可能性。