2012-01-11 68 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]