HTACCESS:URL的RegEx匹配替换

时间:2011-05-20 06:28:32

标签: regex .htaccess

我希望htaccess Redirect 301使用正则表达式执行以下操作:

  

http://example.com/folder/abc_123_123.htm

  

http://example.com/abc-123-123.shtml

新网址的3个目标是

  • 删除/文件夹/

  • 用 -

  • 替换所有_
  • 用shtml替换htm

2 个答案:

答案 0 :(得分:1)

最好我知道,如果没有RewriteMap,你的观点#2就无法完成,这需要一些讨厌的配置或多个规则。

此实现应该是通用的,适用于任意数量的下划线,但它的价格昂贵,因为它可能会触发许多重定向(事实上,如果您的路径中有大量下划线,则可能足以在浏览器中触发重定向错误):

RewriteBase /
RewriteRule ^(folder/[^_]*)_(.*\.html?)$ /$1-$2 [L,R=301]
RewriteRule ^folder/(*+)\.html?$ /$1.shtml [L,R=301]

替代方案包括根据需要枚举用例,或者(更好的是,我怀疑)将请求重写为perl或php脚本并从那里执行regexp_replace + redirect 301。

RewriteBase /
RewriteRule ^folder/(*+)\.html?$ /folder/redirect.php [L,QSA]

答案 1 :(得分:0)

RewriteEngine On
RewriteBase /
RewriteRule ^folder/([a-z]+)_(\d+)_(\d+)\.htm$ http://example.com/$1-$2-$3.shtml [L,R=301]