2

这些网址中的正则表达式是什么:.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]
4

2 回答 2

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/boyhttp://localhost/site/var1/var2/hello/world/boy

于 2013-10-18T08:37:01.283 回答
1

根据您非常好的回答,Anubhava 这里是我在任何 url 末尾重写 slug 的解决方案,而不仅仅是基于/site/var1/var2

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_URI} ^(.*?)/((?:[^-]*-)*)([^-]*)-((?=.*?\3).*)$ [NC]
RewriteRule . %1/%2%4 [R=301,L]
于 2013-10-18T11:27:44.557 回答