【问题标题】:301 redirect on AJAX -- redirected?AJAX 上的 301 重定向 - 重定向?
【发布时间】:2012-09-12 10:35:09
【问题描述】:

我有一个对服务器端点的 AJAX 调用,它执行 301 重定向到同一页面,但带有一个尾部斜杠。

浏览器在使用 AJAX 调用时会遵循重定向还是忽略它们?在我的情况下,它不遵循它们,但我认为它可能来自服务器配置。

【问题讨论】:

    标签: ajax redirect


    【解决方案1】:

    如果您使用的是 jquery,您可以查看以下问题来实现它。默认情况下,jQuery(以及大多数带有 Ajax 的库)不遵循默认重定向:

    How to manage a redirect request after a jQuery Ajax call

    How to prevent ajax requests to follow redirects using jQuery

    handle jquery ajax redirect

    【讨论】:

    • 好的,所以 jQuery 不遵循重定向,我明白了。谢谢。
    • 嗯,没有。 XHR 将透明地遵循重定向。
    • 并非在所有情况下。我有一个 301 重定向设置,而 FF 没有遵循它们。但是,Chrome 可以。
    • 这甚至没有尝试按要求回答问题。它谈论的是一个与实际问题完全不相关的库。即使这样,它也很模糊,并且过于依赖链接。
    【解决方案2】:

    也许这个答案有点晚了,但我对 ajax 请求的 301 响应也有同样的问题。解决方法很简单:

    apache 重写规则是这样的:

    RewriteRule ^([^/]\w+)/?$ index.php?%{QUERY_STRING} [L,E=MODULE:$1]
    

    您的 XHR-Request 网址看起来像这样:

    /this/is/a/canonical/url + '?param=1&param=2...'
    

    如果您不使用直接文件调用 (f.i. *.php) 并改写为规范 URL(看起来像没有 f.i. *.php 的目录路径),它将导致 301 永久移动。

    要解决这个问题,只需将 / 添加到您的 XHR-Request-URL 中,如下所示:

    /this/is/a/canonical/url + '/' + '?param=1&param=2...'
    

    也许这会对某人有所帮助。

    【讨论】:

      【解决方案3】:

      我也遇到了这个问题,关于尾部斜杠的建议让我思考......我在我的 Web.Config 中有一个重写规则,使所有内容都小写,这就是我的 AJAX 调用搞砸的原因。我正在发布到 GetResults(显示为 301),而我的重写器(出于某种未知原因?)正在将其更改为小写的 getresults GET,导致 404。

      希望这可能对其他人有所帮助。

      【讨论】:

        【解决方案4】:

        根据 jQuery 的 API doc (http://api.jquery.com/jQuery.ajax/),async:false(又名同步模式)不支持跨域和dataType: "jsonp" 请求。

        【讨论】:

        • 抱歉,这与问题有什么关系?
        • @EduardLuca 很抱歉,您的重定向没有跨域。
        • 我不需要跨到另一个域,重定向发生在同一个 URL 上,但带有斜杠。
        猜你喜欢
        • 1970-01-01
        • 2013-01-07
        • 2018-03-06
        • 2012-12-14
        • 1970-01-01
        • 2010-09-26
        • 2014-08-31
        • 1970-01-01
        • 2019-05-30
        相关资源
        最近更新 更多