.htaccess - 如何删除url中重复的单词?

时间:2013-10-17 18:02:33

标签: regex .htaccess mod-rewrite

.htaccess中的正则表达式是什么来自这些网址:

example.com/hello-world-world
example.com/hello-world-hello

到这一个:

example.com/hello-world

像这样使用RewriteCond:

RewriteCond %{REQUEST_METHOD}  !=POST
RewriteCond %{REQUEST_URI} ^REGEX$
RewriteRule . %1 [R=301,L]

2 个答案:

答案 0 :(得分:3)

从slug中删除所有重复的单词非常棘手仅在mod_rewrite中完成,但这里有一个lookahead based正则表达式规则,而不是你可以使用:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/((?:[^-]*-)*)([^-]*)-((?=.*?\2).*)$
RewriteRule ^ /%1%3 [L,R]
  • 这会将/hello-world-world重定向到/hello-world
  • 这会将/hello-world-hello重定向到/world-hello

更新:根据您的意见:

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_URI} ^(/site/var1/var2)/((?:[^-]*-)*)([^-]*)-((?=.*?\3).*)$ [NC]
RewriteRule ^ %1/%2%4 [L,R]

这会将http://localhost/site/var1/var2/hello-world-world重定向到http://localhost/site/var1/var2/hello-world,从而删除副本。

更新2:根据您的意见:

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_URI} ^(/site/var1/var2)/((?:[^/]*/)*)([^/]*)/((?=.*?\3).*)$ [NC]
RewriteRule ^ %1/%2%4 [L,R]

这会将http://localhost/site/var1/var2/hello/world/world/boy/boy重定向到http://localhost/site/var1/var2/hello/world/boy

答案 1 :(得分:1)

根据你非常好的答案,Anubhava是我在任何网址末尾重写slu 的解决方案,而不仅仅基于/site/var1/var2

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_URI} ^(.*?)/((?:[^-]*-)*)([^-]*)-((?=.*?\3).*)$ [NC]
RewriteRule . %1/%2%4 [R=301,L]