我正在尝试重定向来自http://www.xyz.com.au/lid/cid_855_1404172的URL请求到http://www.xyz.com.au/lid/1404172我的正则表达式匹配最后一个下划线后的数字,但最终的URL仍然附加了我试图省略的部分
http://www.xyz.com.au/lid/cid_855_1404172
http://www.xyz.com.au/lid/1404172
RewriteRule ([^_]+)$ /lid/$1
结果是:http://www.xyz.com.au/lid/cid_855_/lid/1404172我做错了什么?
http://www.xyz.com.au/lid/cid_855_/lid/1404172
wsewodh21#
为了能够匹配和替换部分,您需要匹配URI的所有部分,而不是部分匹配。您可以使用此重定向规则:
RewriteRule ^(.+/)?[^/]*_([^_]+)/?$ /$1$2 [L,R=301,NE]
所用正则表达式的详细信息:
^
(.+/)?
/
[^/]*
_
([^_]+)
/?$
1条答案
按热度按时间wsewodh21#
为了能够匹配和替换部分,您需要匹配URI的所有部分,而不是部分匹配。
您可以使用此重定向规则:
所用正则表达式的详细信息:
^
:开始(.+/)?
:匹配捕获组#1中任何字符的1+后跟/
[^/]*
:匹配0个或多个非/
的字符(最长可能匹配;贪婪)_
:匹配_
([^_]+)
:匹配1+捕获组#2中不是_
的任何字符/?$
:匹配可选/
和结束锚