2011-06-08 36 views
4

一個URL重寫規則,我有一個重寫規則我有6個頁面有類似的情況,對我的索引頁6種情景

RewriteRule ^index$ index.php [L] 
RewriteRule ^index/$ index.php [L] 
RewriteRule ^index/page/(0?[1-9]|1[0-2])$ index.php?recordstart=$1 [L] 
RewriteRule ^index/page/(0?[1-9]|1[0-2])/$ index.php?recordstart=$1 [L] 

工作。

例如。

RewriteRule ^graduate$ graduate.php [L] 
RewriteRule ^graduate/$ graduate.php [L] 
RewriteRule ^graduate/page/(0?[1-9]|1[0-2])$ graduate.php?recordstart=$1 [L] 
RewriteRule ^graduate/page/(0?[1-9]|1[0-2])/$ graduate.php?recordstart=$1 [L] 

我正在尋找一個可以匹配六個確切場景的重寫,而不是重複四次六次。

感謝

回答

2

喜歡的東西:

RewriteRule ^(scenario1|scenario2|scenario3)$ $1.php [L] 
RewriteRule ^(scenario1|scenario2|scenario3)/$ $1.php [L] 
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])$ $1.php?recordstart=$2 [L] 
RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/$ $1.php?recordstart=$2 [L] 

感覺髒,但如果你想排除所有其他情形的,除了提到的那些。

編輯:我會在這裏它也可以通過與?檢查/後,它將匹配帶或不帶尾隨/除去2號線的規則。該解決方案將變得:

RewriteRule ^(scenario1|scenario2|scenario3)/?$ $1.php [L] 
    RewriteRule ^(scenario1|scenario2|scenario3)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L] 
2
RewriteRule ^(index|graduate)/?$ $1.php [L] 
RewriteRule ^(index|graduate)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L] 

|(管)中的正則表達式用於提供替代方案,實際上它的意思是「或」。您可以根據需要添加儘可能多的值,並用| s分隔。

如果您知道自己在做什麼,也可以使用^([a-zA-Z]+)/?$,但這意味着您的規則會捕獲僅包含英文字母的每個值。那麼你必須處理錯誤。

我已經簡化了規則,最後加入了/?,這意味着可選的結束斜槓。

0

這項工作(未經測試)?

RewriteRule ^(index|graduate|...)$ $1.php [L] 
RewriteRule ^(index|graduate|...)/$ $1.php [L] 
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])$ $1.php?recordstart=$2 [L] 
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/$ $1.php?recordstart=$2 [L] 

我想你也可以減少規則如下:

RewriteRule ^(index|graduate|...)/?$ $1.php [L] 
RewriteRule ^(index|graduate|...)/page/(0?[1-9]|1[0-2])/?$ $1.php?recordstart=$2 [L] 
2

首先,只是爲了節省一些空間,可以縮短前四個規則,兩個這樣的:

RewriteRule ^index(/|)$ index.php [L] 
RewriteRule ^index/page/(0?[1-9]|1[0-2])(/|)$ index.php?recordstart=$1 [L] 

然後你可以修改這兩行如下:

RewriteRule ^(page1|page2|page3|page4|page5|page6)(/|)$ $1.php [L] 
RewriteRule ^(page1|page2|page3|page4|page5|page6)/page/(0?[1-9]|1[0-2])(/|)$ $1.php?recordstart=$1 [L]