【问题标题】:301 Redirects Rewrite Rule to replace underscore with hyphen and remove subdirectory301 重定向重写规则以用连字符替换下划线并删除子目录
【发布时间】:2017-04-06 17:55:21
【问题描述】:

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

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

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

那么重定向的要求如下:

  • 删除 /sub_directory/
  • 将所有下划线“_”更改为连字符“-”

不幸的是,我的正则表达式不是很好。我已经尝试过四处搜索,但其他帖子中的解决方案对我不起作用(例如here

对此解决方案的任何帮助将不胜感激。另外,如果您能解释一下它的原因/方式。我希望能够更好地理解这一点。

【问题讨论】:

  • sub_directory/.htaccess 中是否已有一些代码?
  • 这是针对根目录中的 .htaccess 的。该站点已转移到一个新平台,该目录不再存在。如上所述,页面结构发生了变化。我现在只是将所有指向该子目录的链接重定向到主产品页面。

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


【解决方案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

【讨论】:

  • 不客气。没想过评论/改进我的回答?
  • @Walf,我尝试了您的答案,但无法成功。但是,我很抱歉,我应该为正则表达式和整个方法(现在已更新)给予您信任
  • 良好的礼仪是在你的答案中写下你的答案。
  • 已编辑答案并参考您的答案。也请看this answer
  • 我的规则中缺少DPI 标志,这救了我!!!无法弄清楚为什么它在那之前不起作用......
【解决方案2】:

类似的东西

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

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

【讨论】:

  • 感谢您的帮助。不幸的是,这没有奏效。 URL 保持不变。尝试将所有下划线更改为连字符也没有效果。也许我们制定的另一条规则是干扰。我们只是要将所有请求重定向到这个子域到主产品页面。再次感谢您。
猜你喜欢
  • 2014-11-26
  • 2018-12-10
  • 2021-10-25
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多