htaccess重写具有字符替换的路径中的所有URL

时间:2014-05-25 15:59:26

标签: apache .htaccess mod-rewrite

我的网站已从1个平台转换为另一个平台。我有数千页索引看起来像这样:

domain.com/test/red_widget.html

domain.com/test/big_red_widget.html

domain.com/test/small_nice_red_widget.html

需要看起来像这样:

domain.com/test/red-widget.html

domain.com/test/big-red-widget.html

domain.com/test/small-nice-red-widget.html

因此,此示例中的所有相关网址都位于" test"路径,使用下划线并具有html扩展名。

我需要"测试"中的所有网址。除了下划线之外,html扩展名的路径将被重写," _",将替换为短划线," - "。

我尝试了很多东西,但我可以兼容当前需要继续工作的htaccess规则。

现在我有这条规则:

RewriteRule ^test/(.*).html$ /?kw=$1

哪个确实有效,但对于像domain.com/test/small_nice_red_widget.html这样的网址,kw参数将被设置为small_nice_red_widget,而我真的需要将它设置为small-nice-red-widget。

任何指导或任何人都可以指出我正确的方向将不胜感激。

2 个答案:

答案 0 :(得分:0)

这应该适合你:

RewriteRule ^test/(.*)_(.*)_(.*)_(.*).html$ /test/$1-$2-$3-$4.html [R,L]
RewriteRule ^test/(.*)_(.*)_(.*).html$ /test/$1-$2-$3.html [R,L]
RewriteRule ^test/(.*)_(.*).html$ /test/$1-$2.html [R,L]

将上述内容置于当前重写规则之上。

答案 1 :(得分:0)

您也可以使用斜杠替换任意数量的下划线:

RewriteRule ^test/(.*)_(.*)\.html$ /test/$1-$2.html [L,E=DASH:Y]
RewriteCond %{ENV:DASH} Y
RewriteRule ^([^_]+)$ /$1 [L,R=301]