如果网址直接复制,我希望能够删除部分网址。
例如,我有以下网址:
http://www.example.com/foo-bar/
http://www.example.com/foo-bar/foo-bar-1/
http://www.example.com/foo-bar/foo-bar-2/0000-0000/
http://www.example.com/foo-bar/foo-bar-bar/foo/
http://www.example.com/foo-bar/foo-bar-foo/foo/bar/
http://www.example.com/foo-bar/foo-bar-foobar/foo/0000-0000/bar/
我希望只有在URL的下一部分出现“foo-bar”时才从URL中删除第一个“foo-bar”。所以我最终会得到这些网址:
http://www.example.com/foo-bar/
http://www.example.com/foo-bar-1/
http://www.example.com/foo-bar-2/0000-0000/
http://www.example.com/foo-bar-bar/foo/
http://www.example.com/foo-bar-foo/foo/bar/
http://www.example.com/foo-bar-foobar/foo/0000-0000/bar/
我使用RegExr测试以下RegEx:
([a-zA-Z]+[^/]*)\W+\1-
选择除第一个URL之外的所有URL,因为它没有“foo-bar”的重复。
然后我把它放入RewriteCond和RewriteRule:
RewriteCond %{REQUEST_URI} ([a-zA-Z]+[^/]*)\W+\1-
RewriteRule [a-zA-Z]+[^/]* http://%{HTTP_HOST}/$1 [L,R=301]
并通过以下网址上的'htaccess tester'进行测试:
http://www.example.com/foo-bar/foo-bar-foobar/foo/0000-0000/bar/
被改写为:
http://www.example.com/foo-bar-foobar/foo/0000-0000/bar/
但是,当我将此代码放入我的.htaccess文件并访问其实际重定向到的URL时:
http://www.example.com/
然后我回过头来看看RewriteRule和我用过的RegEx:
[a-zA-Z]+[^/]*
当我通过RegExr运行时,我意识到它选择的不仅仅是第一个“foo-bar”。
我相信这是我陷入困境的地方,因为我无法找出只选择第一个“foo-bar”的RegEx。我试过寻找一个解决方案,我试过调整一些人给以下问题的答案,但无济于事:
RewriteCond RewriteRule for .htaccess based on URL to a new page, regular expression
Regex to find text between second and third slashes
我希望我能够很好地解释自己。有任何问题请询问。
提前谢谢你,
克里斯。
答案 0 :(得分:0)
您可以在根.htaccess中使用此基于前瞻的规则:
RewriteEngine On
RewriteRule ^([^/]+)/((?=.*?\1).+)$ /$2 [L,R=302,NE]