如果找到则删除重复进行重写

时间:2017-10-27 22:00:05

标签: regex apache .htaccess redirect mod-rewrite

我当前的.htaccess看起来像这样

RewriteEngine On
RewriteBase /

# / = /home
RewriteRule ^$ index.php?r=home [QSA,L]

# /example/ = /example
RewriteRule ^(.*)/$ /$1 [L,R=301]


# request, but not pointing to an existing file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

# pass the whole request as a variable
RewriteRule ^(.+)$ index.php?r=$1 [QSA]

完成这些重写后,我想确保URL最终没有路径的重复部分。
以下是一些测试用例,可以更清楚地展示我想要完成的任务:

domain.tld/example                // No more rewrites
domain.tld/example/example        // Rewrite to domain.tld/example
domain.tld/test/example/example   // Rewrite to domain.tld/test/example
domain.tld/example/test/test/test // Rewrite to domain.tld/example/test/test

所以基本上,如果URL的最后部分与倒数第二部分相同,则删除最后一部分。

我设法将这个正则表达式组合在一起:

\/(.+)\/{1}\1$

似乎匹配URL的任何重复部分,但我不知道这是否适合我的需要,或者如何实现实际的URL重写本身。

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

想通了我可以使用以下RewriteRule来完成此任务。

RewriteRule (.+)\/\1$ $1 [L,R=301]
相关问题