如何将这些RewriteRules组合成一行,每个参数都是可选的?
RewriteRule ^(.*)/(.*)/(.*)/(.*)/ index.php?_page=$1&_sub=$2&_area=$3&_ex=$4 [NC,QSA,L]
RewriteRule ^(.*)/(.*)/(.*)/ index.php?_page=$1&_sub=$2&_area=$3 [NC,QSA,L]
RewriteRule ^(.*)/(.*)/ index.php?_page=$1&_sub=$2 [NC,QSA,L]
RewriteRule ^(.*)/ index.php?_page=$1 [NC,QSA,L]
RewriteRule ^ index.php [NC,QSA]
我相信.*
自动需要下一个块,否则它也会被捕获,所以你可以用[^/]+
替换它,但是当我在一行上执行此操作时(删除除第一个规则之外的所有内容),它停止工作?
答案 0 :(得分:1)
您可能会感到失望,因为您无法解决所要求的问题。
此外,对于每个(n + 1)子目录,变量名称都会更改...所以肯定没有解决方案。
无论如何,您可以使用以下内容减少RewriteRules:
RewriteRule ^([^/]*)(/([^/]*))?/ index.php?_page=$1&_sub=$2 [NC,QSA,L]
使第二个参数为空但匹配一个或两个参数。
答案 1 :(得分:0)
您的rexexp ^app/?([\w]+)?/?([\w]+)?/?([\w]+)?/?((.*?)+)?$
在语义上与您的起始级联不同。
无论如何,在正则表达式中,贪婪的([^/]*)
更好,因为它可以与/?
一起使用。
RewriteRule ^([^/]*)/?^([^/]*)/?^([^/]*)/?^([^/]*)$ index.php?_page=$1&_sub=$2_area=$3&_ex=$4 [NC,QSA,L]