在第一次匹配后,您没有 [L]
停止处理的标志,并且您的第二个规则也将与第一个匹配。由于它更具体,请先列出它,然后将[L]
. (.*)
此外,我建议不要贪婪,而是([^/]+)
将所有内容匹配到下一个/
:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# List this first, with [L]
RewriteRule ^([^/]+)/editor/(.*)$ index.php?lang=$1&page=editor&func=$2 [L]
# Then URIs not containing editor/ will match the other rule
RewriteRule ^([^/]+)/(.*)$ index.php?lang=$1&page=$2 [L]
如果 CSS 和图像失败,您可能需要移动规则RewriteCond
下方的内容editor/
,以确保条件仅适用于最不具体的、全面匹配的条件:
RewriteRule ^([^/]+)/editor/(.*)$ index.php?lang=$1&page=editor&func=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/(.*)$ index.php?lang=$1&page=$2 [L]