【问题标题】:.htaccess regex replace dashes by underscore.htaccess 正则表达式用下划线替换破折号
【发布时间】:2016-09-08 18:32:33
【问题描述】:

由于某种原因,一位同事在我们网站的 URL 中用下划线替换了虚线。

我想在我们的 .htaccess 中使用正则表达式将旧 URL 301 转换为新 URL

我发现这段代码按预期工作得很好,它应该做相反的事情,它将下划线替换为破折号:

RewriteEngine     On
RewriteRule       ^(/?articles/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N]
RewriteRule       ^(/?articles/.*/[^/]*?)_([^/_]*)$       $1-$2 [R=301]

但由于某种原因,我忽略了为什么如果我颠倒逻辑它不起作用

RewriteEngine     On
RewriteRule       ^(/?articles/.*/[^/]*?)-([^/]*?-[^/]*)$ $1_$2 [N]
RewriteRule       ^(/?articles/.*/[^/]*?)-([^/-]*)$       $1_$2 [R=301]

即使我逃脱了破折号,它也不起作用,欢迎任何想法或更正

【问题讨论】:

标签: regex apache mod-rewrite


【解决方案1】:

您可以在您的站点根目录中使用这些规则 .htaccess 和DPI flag:

RewriteEngine On

RewriteRule ^(articles/[^-]*)-+([^-]*-.*)$ $1_$2 [N,NC,DPI]

RewriteRule ^(articles/[^-]*)-([^-]*)$ /$1_$2 [NE,L,NC,R=301]

DPI 标志会导致重写 URI 的 PATH_INFO 部分被丢弃。

【讨论】:

  • 太棒了!奇迹般有效!我真的需要学习我的正则表达式知识,它非常有用,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多