Apache 重写第二范围

Apache 重写第二范围,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我想测试底部两个规则的文件是否都存在,但它似乎只适用于第一个规则。第二条规则将错误地匹配my/style.css文件,并显示php页面而不是style.css 在[L]标志出现之前,它不是应该测试下一个规则的文件是否存在吗 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/([^/]+)/?$ browse_folder.

我想测试底部两个规则的文件是否都存在,但它似乎只适用于第一个规则。第二条规则将错误地匹配my/style.css文件,并显示php页面而不是style.css

[L]
标志出现之前,它不是应该测试下一个规则的文件是否存在吗

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^([^/]+)/([^/]+)/?$ browse_folder.php?username=$1&folder=$2
RewriteRule ^([^/]+)/?$ browse_user.php?username=$1 [L]
如果我在两行之前重复文件_exists测试,它将按预期工作

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^([^/]+)/([^/]+)/?$ browse_folder.php?username=$1&folder=$2

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^([^/]+)/?$ browse_user.php?username=$1 [L]
它不是应该测试文件是否存在,直到 [五十] 旗帜

不,不是
RewriteCond
仅应用于第一个下一个
RewriteRule
。从:

RewriteCond指令定义了一个规则条件。一个或多个 RewriteCond可以位于RewriteRule指令之前。下面的规则是 然后,仅当URI的当前状态与它的 模式,以及是否满足这些条件

注意,
可以在
a
重写规则

变通办法 如果您不想重复,可以按以下步骤进行:

RewriteEngine On

# Don't touch existing files/folders
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# Those rules are only applied to non-existing files/folders
RewriteRule ^([^/]+)/([^/]+)/?$ browse_folder.php?username=$1&folder=$2
RewriteRule ^([^/]+)/?$ browse_user.php?username=$1 [L]

RewriteCond
仅适用于下一个
RewriteRule
。您可以制定一个单独的规则,在其他重写规则的基础上跳过所有文件和目录

RewriteEngine On

# skip all existing files and directories
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/?$ browse_folder.php?username=$1&folder=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ browse_user.php?username=$1 [L,QSA]

谢谢
[L.QSA]
是一个输入错误吗?感谢您的捕捉,是的,确实是一个输入错误。很抱歉,我没有跟上进度,我在尝试修复此问题时转移到了另一个项目,如果我切换回,我将进行测试。