302 重定向是如何发生的?
Posted
技术标签:
【中文标题】302 重定向是如何发生的?【英文标题】:How is 302 Redirect Happening? 【发布时间】:2015-10-31 12:45:33 【问题描述】:我在使用 302 重定向处理的 Magento 网站上遇到问题。如果我禁用了主题的默认博客模块,则站点/主题中的某些内容会导致 site.com/blog 链接上的 302 重定向转到主页。我正在尝试将该 url 用作 WordPress 安装的主页,但是这个本机模块已经劫持了它,我找不到它发生的位置。
如果模块处于打开状态,则可以使用链接,但是当您将其关闭时,它会重定向。我猜这是该模块的本机但由于某种原因我似乎无法更改该行为并完全禁用它(理想情况下,如果我在博客模块关闭时收到 404 错误会很好,因为至少我知道该 URL 可供我使用)。
关闭模块后,我访问了 Chrome 上的页面并在开发者工具的网络选项卡上收听。确实会出现 302 重定向。
HTTP/1.1 302 Moved Temporarily
Date: Sat, 08 Aug 2015 00:01:45 GMT
Server: Apache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Set-Cookie: frontend=80cfd66318165451fa4aa2915d139404; expires=Sat, 08-Aug-2015 02:01:45 GMT; path=/; domain=www.example.com; httponly
Location: http://www.example.com/
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
GET /blog HTTP/1.1
Host: www.example.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: _gaost=.rk=; _gaos=.gaos_r=(direct).mc=(no)|(no)|(no).gaos_k=.pc=2; __ar_v4=M5J3LQW4MFADRNVY2ORZM7%3A20150610%3A4%7CN3LC2IOELZFOVNMCXKXXWV%3A20150610%3A4%7C5DCLBJIK7FDQFMXMCEDBUU%3A20150610%3A4; frontend=80cfd66318165451fa4aa2915d139404; __utma=176154288.93372352.1432329461.1435683793.1435792914.29; __utmz=176154288.1432329461.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __atuvc=3%7C26%2C3%7C27%2C17%7C28; adminhtml=d90076dbca44dcccdd004d86240b9683; adminhtml=d90076dbca44dcccdd004d86240b9683; frontend=80cfd66318165451fa4aa2915d139404
我知道 302 可能是由 .htaccess 文件引起的,所以我通过 SSH 连接到服务器并使用 find
定位服务器上的所有 .htaccess 文件(并找到了 17 个),但它们都没有任何重定向代码会影响那个页面。
有什么方法可以检测 302 重定向发生的位置/原因/方式?这个模块/插件没有关于这个问题的文档,我到处寻找,甚至联系了开发人员,但没有收到回复。
感谢您的帮助。
【问题讨论】:
302 重定向不仅会因为 .htaccess 而发生,请搜索header("Location:
语句。运行 grep 看看是否能找到作恶者。
按照@Tom Kriek 所说的操作后,刷新缓存,然后重试。
@TomKriek,很好的想法。我运行了一个 grep 并没有找到任何与博客相关的标题调用。是否还有其他我没有考虑到的 302 重定向实例?
【参考方案1】:
Magento 是一个很棒的平台,具有大量的选项和功能,但 302 重定向几乎在每个电子商务/博客网站上都会发生。
关于302 redirection in Magento
有很多问题。
有时您在 System > Configuration > General > Web > Url Options
中设置了 301 重定向,但它一直显示 302,有时您会收到有关大量页面的警报,例如带有 302 重定向的 example.com/blog/post/1234
等。
Magento 自动为以下网址设置 302 重定向:
加入比较 加入愿望清单 切换货币 切换位置 ...(来源:https://www.mavenecommerce.com/blog/302-redirects-in-magento/)
所以尝试直接从 Magento 的选项转到 System > Configuration > General > Web > Url Options
进行更改(如果可能)。可能可以直接从那里进行更改。
【讨论】:
当“www”不在浏览器中的 URL 前面时,可以选择执行 302 重定向,但这并不能解决我正在寻找的问题。它似乎不是全站范围的 302...【参考方案2】:我发现了问题。
这与 Magento 中的“路由”有关。有一个名为 addRoute 的函数,我在服务器上进行了 grep 查找“addRoute”,并找到了一堆文件。
然后我能够找到整个博客模块进行重定向的文件夹,并且只需要检查模块的逻辑并禁用它的类中的一些功能。
【讨论】:
以上是关于302 重定向是如何发生的?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点