2012-01-11 63 views
0

如何将这些RewriteRules组合成一行,每个参数都是可选的?可选RewriteRule参数

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] 

我相信.*自动要求下一个块,否则它捕捉到,所以你可以替换成[^/]+然而,当我这样做,在一行(删除所有,但第一条规则),它停止工作?

回答

1

您可能会感到失望,因为您没有解决问题。

此外,对于每个(n + 1)子目录变量名称更改...所以肯定没有解决方案。

反正你可以使用类似的事情减少你的RewriteRules:

RewriteRule ^([^/]*)(/([^/]*))?/ index.php?_page=$1&_sub=$2 [NC,QSA,L] 

这使得第二个参数为空但同时匹配一个或两个参数

+1

好这个工程,'重写规则^应用程序/?([\ w] +)?/?([\ w] +)?/?([\ w] +)?/?((*。 ?)+)?$ index.php?_page = $ 1&_sub = $ 2&_area = $ 3&_ex = $ 4 [NC,QSA,L]' – James 2012-01-11 13:24:26

+0

所以,我的答案可以被认为是“差不多”很好! :) – 2012-01-11 16:00:30

+0

是的,对不起,我打算打勾! – James 2012-10-11 08:44:45

0

您的rexexp ^app/?([\w]+)?/?([\w]+)?/?([\w]+)?/?((.*?)+)?$在语义上与您的起始级联不同。

  • 该应用程序与可选/来自哪里?
  • 如何处理非单词字符,如“。”?
  • 非贪婪算子([\ w] +) /是多余的
  • 附加参数伪目录怎么办?

无论如何,用正则表达式来看,贪婪([^/]*)更好,因为这将与/?正常工作。

RewriteRule ^([^/]*)/?^([^/]*)/?^([^/]*)/?^([^/]*)$ index.php?_page=$1&_sub=$2_area=$3&_ex=$4 [NC,QSA,L]