我当前的.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重写本身。
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
想通了我可以使用以下RewriteRule
来完成此任务。
RewriteRule (.+)\/\1$ $1 [L,R=301]