【发布时间】: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]
即使我逃脱了破折号,它也不起作用,欢迎任何想法或更正
【问题讨论】:
-
嗯,你想用
_替换-,反之亦然?你的链接也有articles/路径吗? -
如果 URL 的结构从 dashed 更改为 underscored,那么为什么第二条规则起作用?
-
实际上我想用下划线替换破折号,这是我的旧 URL:example.com/articles/whatever/my-old-article 我的新 URL:example.com/articles/whatever/my_old_article 要么什么都没有发生,要么我得到一个奇怪的绝对路径重定向,像这样:example.com/home/user/public_html/web/sites/default/… .当我添加 L 时,我得到了这个绝对路径:[R=301,L]
-
好的,我发现我的语法有问题,但找不到让它工作的方法
标签: regex apache mod-rewrite