2010-11-10 49 views
2

我幾乎沒有用mod_rewrite的規則,但我已經在:)的mod_rewrite替換爲'_ ' - '

屈服於我需要重寫

country/[countryname].php 

country/[countryname]/ 

然而,[COUNTRYNAME]可能有這樣一個下劃線:「south_africa.php」,如果它想用連字符來代替它:「南非洲/」

我也想匹配,如果國家有後面的數字:'france03.php'到'法國/'

繼承人我的規則,它幾乎在那裏,但它仍然添加一個連字符,即使沒有第二部分之後下劃線。

RewriteRule ^country/(.*)_(.*?)[0-9]*\.php$ country/$1-$2 [R=301,L] 

所以目前「國家/ south_.php」變成了「國家/朝南/」

是否有人可以幫助我找到拼圖的原因之一嗎?謝謝。

+0

OK,我有點困惑 - 你**不**想把'south_.php'替換成'south-.php'?那麼'south_1.php','south_12.php'呢?你可以在其他地方使用數字,例如'south_a1b34.php'? – Kobi 2010-11-10 12:04:22

+0

對不起,我沒有解釋得很好!似乎我已經排序。我被告知永遠不會有這樣的網址。對我來說足夠了。 – 2010-11-10 12:13:26

回答

3

試試這個:

RewriteRule ^country/([^_]*)_([^_]*?)\d*\.php$ country/$1-$2 [R=301,L] 

此規則將匹配的網址與單下劃線 - 你會需要更多的下劃線或沒有不同的規則。

如果您想確定$2只包含字母並且不爲空,請將其([^_]*?)更改爲([a-zA-Z]+)

2

或者你可以做到這一點了若干遍:

# If request is for something in "country/" 
RewriteCond %{REQUEST_URI} ^country/.+\.php$ 

# Replace underscore and digits with (single) hyphen 
RewriteRule [_0-9]+ \- 

# Remove extension (and possible trailing hyphen) 
RewriteRule ^(.*)-?\.php$ $1 

# Final rewrite 
RewriteRule ^country/(.*)$ country/$1 [R=301,L] 

未經測試...而不一定是「漂亮」 :)