什么原因导致了此 301 重定向循环?

什么原因导致了此 301 重定向循环?

我的 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.xmlindex.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

相关内容