我的 Ubuntu /etc/apache2/sites-available 文件中有几个重定向指令:
Redirect 301 /rss.xml http://example.com/feed/index.xml
Redirect 301 /atom.xml http://example.com/feed/atom/index.xml
Redirect 301 /feed/ http://example.com/feed/index.xml
Redirect 301 /feed http://example.com/feed/index.xml
据我所知,它们都运行正常。
然而,当我访问http://example.com/feed/index.xml使用 web-sniffer.net,它返回指向http://example.com/feed/index.xmlindex.xml,然后被重定向到http://example.com/feed/index.xmlindex.xmlindex.xml,等等。
似乎其中一个模式匹配了,而我却没有预料到。如果我省略最后两个重定向,循环就会停止,但那时我并没有在应该重定向 /feed 和 /feed/ 的时候重定向。
关于如何使其正确工作有什么想法吗?
(我认为这个问题与这个问题有关:无限重定向循环?)
答案1
Redirect
是简单的前缀匹配,“匹配的 URL 路径之外的附加路径信息将附加到目标 URL。”
因此,/feed/index.xml
将您的第三条规则/feed/
与附加路径信息进行匹配,以便index.xml
将其重定向到并附加到该规则。/feed/index.xml
index.xml
解决方案是使用RedirectMatch
并使用锚点:
RedirectMatch 301 ^/rss.xml$ http://example.com/feed/index.xml
RedirectMatch 301 ^/atom.xml$ http://example.com/feed/atom/index.xml
RedirectMatch 301 ^/feed/$ http://example.com/feed/index.xml
RedirectMatch 301 ^/feed$ http://example.com/feed/index.xml