Kei*_*ams 20 regex mod-rewrite
我在这里透露了我对REGEX-fu的尴尬无知,但是:我目前有一个网站,其中文章的URL被写为"article_name",而较新的URL被写为"article-name".
我想将它们全部移动到使用破折号,那么是否有一个正则表达式可以用来将旧URL重写为更新的等价物?
提前感谢你!
kch*_*kch 23
首先,您必须在现有URL中实现一致性.基本上,您必须将所有现有名称规范化以始终使用破折号.好的,你已经做到了.
我们从以下假设开始:
URL大致为以下形式:
http://example.com/articles/what-ever/really-doesnt_matter/faulty_article_name
只/articles
应重写下面的URL ,并且只/faulty_article_name
需要对部件进行清理.
对于Apache:
RewriteEngine On
RewriteRule ^(/?articles/.*/[^/]*?)_([^/]*?_[^/]*)$ $1-$2 [N]
RewriteRule ^(/?articles/.*/[^/]*?)_([^/_]*)$ $1-$2 [R=301]
Run Code Online (Sandbox Code Playgroud)
这通常受到了GApple答案的启发.
第一个/?
确保此代码将在vhost confs和.htaccess
文件上运行.后者不期望领先的斜线.
然后我添加该articles/
部分以确保规则仅适用于其中的URL /articles
.
然后,虽然我们在URL中至少有两个下划线,但我们会继续循环规则.当我们最终只有一个剩下的下划线时,第二个规则开始,用短划线替换它,并进行永久重定向.
唷.
Gum*_*mbo 14
试试这个:
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
第一条规则一次替换一个下划线,直到剩下一个或更少.最后一条规则将替换最后一个下划线并执行外部重定向.