【发布时间】:2014-11-26 10:42:36
【问题描述】:
如果 URL 本身直接重复,我希望能够删除它的一部分。
例如,我有以下网址:
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/
只有当“foo-bar”出现在 URL 的下一部分时,我才想从 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]
并通过以下 URL 上的“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”的正则表达式。我已尝试寻找解决方案,我已尝试调整人们对以下问题的一些答案,但无济于事:
RewriteCond RewriteRule for .htaccess based on URL to a new page, regular expression
Regex to find text between second and third slashes
我希望我已经充分解释了自己。有任何问题欢迎提问。
提前谢谢你,
克里斯。
【问题讨论】:
标签: regex apache .htaccess mod-rewrite