我几乎有一个mod_rewrite规则,但我已陷入其中:)
我需要重写
country/[countryname].php
到
country/[countryname]/
然而,[countryname]可能有这样的下划线:'south_africa.php'如果确实如此,我想用一个夸张的替换它:'south-africa /'
如果国家/地区有数字,我也想匹配:'france03.php'到'france /'
继承我的规则,它几乎在那里,但即使在下划线之后没有第二部分,它仍然会添加连字符。
RewriteRule ^country/(.*)_(.*?)[0-9]*\.php$ country/$1-$2 [R=301,L]
所以目前'country / south_.php'变成'country / south - /'
有人可以帮我找到拼图的缺失部分吗?感谢。
答案 0 :(得分:3)
试试这个:
RewriteRule ^country/([^_]*)_([^_]*?)\d*\.php$ country/$1-$2 [R=301,L]
此规则会将网址与单下划线匹配 - 您需要一个不同的规则来获得更多下划线或没有。
如果您想确保$2
仅包含字母且不为空,请将([^_]*?)
更改为([a-zA-Z]+)
。
答案 1 :(得分: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]
未经测试......并不一定“非常”:)