这些网址中的正则表达式是什么:.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]
这些网址中的正则表达式是什么:.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]
从 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
根据您非常好的回答,Anubhava 这里是我在任何 url 末尾重写 slug 的解决方案,而不仅仅是基于/site/var1/var2
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_URI} ^(.*?)/((?:[^-]*-)*)([^-]*)-((?=.*?\3).*)$ [NC]
RewriteRule . %1/%2%4 [R=301,L]