301重定向重写规则以用连字符替换下划线并删除子目录

时间:2016-11-22 21:53:34

标签: apache .htaccess redirect mod-rewrite url-rewriting

我需要帮助为.httaccess文件夹中的以下链接结构创建重写规则/ 301重定向。

来源网址:www.example.com/sub_directory/product_name_1.html

目标网址:www.example.com/prodcut-name-1.html

然后重定向的要求如下:

  • 删除/ sub_directory /
  • 更改所有下划线' _'连字符' - '

不幸的是我的正则表达并不是很好。我尝试过搜索,但其他帖子中的解决方案存在类似问题但不适用于我(例如here

对此解决方案的任何帮助都将非常感激。如果你能解释它为什么/如何,请。我希望能够更好地理解这一点。

2 个答案:

答案 0 :(得分:1)

像这样的东西

RewriteEngine on
RewriteBase /
RewriteRule ^(sub_directory/[^_]*)_+(.*) $1-$2 [DPI,N]
RewriteRule ^sub_directory(?:$|/(.*)) http://%{HTTP_HOST}/$1 [R=301,L]

它首先循环遍历该子目录中的URL,用单个连字符替换连续的下划线。它首先完成,因此它不会干扰可能包含下划线的其他URL。然后,它将该子目录的(已清理的)请求外部重定向到根目录。丑陋的分组确保它只适用于该文件夹。

答案 1 :(得分:1)

Answer from @Walf已关闭但需要进行一些更改,例如正则表达式锚点和DPI标志。

您可以在网站根目录上使用这些规则.htaccess

RewriteEngine On

# remove /sub_directory/ when there is no _ left
RewriteRule ^sub_directory/([^_]+)$ /$1 [R=301,NC,NE,L]

# use recursion based rule to replace _ by -
RewriteRule ^(sub_directory/[^_]*)_+(.*)$ $1-$2 [NC,N,DPI]

# rest of your rules go here