Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex RewriteCond检查目录是否存在索引文件_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Regex RewriteCond检查目录是否存在索引文件

Regex RewriteCond检查目录是否存在索引文件,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我正在尝试重写所有请求,除非URL指向: 现有文件 带有索引文件的目录 因此,我有以下几点应该处理: RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ redirect.php [QSA] 但是当我导航到一个包含index.php的文件夹时(是的,我检查了DirectoryIndex是否设置为index.php),它仍然执行重写 我还发现了一件有趣的事情:如果

我正在尝试重写所有请求,除非URL指向:

  • 现有文件
  • 带有索引文件的目录
因此,我有以下几点应该处理:

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ redirect.php [QSA]
但是当我导航到一个包含
index.php
的文件夹时(是的,我检查了
DirectoryIndex
是否设置为
index.php
),它仍然执行重写

我还发现了一件有趣的事情:如果我在文件夹中有一个
.htaccess
,并且
重写引擎处于打开状态(仅此而已),那么上面的重写规则就起作用了


有指针吗?

您需要检查目录部分:

RewriteCond %{REQUEST_FILENAME}/index\.php !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ redirect.php [QSA,L]
此外:

有趣的是,我还发现,如果我在那个文件夹中有一个.htaccess,并且“重写引擎”(RewriteEngine)处于打开状态,那么上面的重写规则就可以工作了


这是因为子目录中的重写规则优先于父目录中的任何规则。因此,如果您有一个子目录的
RewriteEngine处于启用状态,并且没有任何规则,那么这意味着该子目录在父目录中的优先级高于重写规则,并且没有任何规则。(有点混乱)。

在根目录中尝试此规则。htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/index.php !-f
RewriteRule ^(.*?)/?$ redirect.php [L]

我认为你的前两个条件是相互排斥的。谢谢,就是这样。奖励这一个答案,因为它还解释了“有趣的事情…”部分:)好的,现在你可以有我的+1:)没有为我的网站工作,不幸的是。浏览器抱怨重定向太多。注释掉所有其他条件/规则。