为啥jQuery会阻止propper 301重定向?

Posted

技术标签:

【中文标题】为啥jQuery会阻止propper 301重定向?【英文标题】:Why does jQuery prevent a propper 301 redirect?为什么jQuery会阻止propper 301重定向? 【发布时间】:2019-08-09 14:16:55 【问题描述】:

我想在表单发布后使用 html 文件中加载的 jquery 和 jquery 移动库进行 301 重定向。

这在某种程度上无法按预期工作,因为目标发生了变化,但 URL 仍保留在浏览器中,这随后会产生一些问题。

HTML 文件,保存为 UTF-8 unix:

<!DOCTYPE html>
<html lang="DE">
<head>
    <title>redirect test</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js"></script>

</head>
<body>

    <form action ="/subapp_search/filter_results_redir.php" method="POST">
        <input type="submit">test
    </form>

</body>
</html>

PHP动作文件,保存为UTF-8 unix,名称:/dir/filter_results_redir.php

<?php
    header("Location: /", TRUE, 301);
    exit;
?>

使用此代码,浏览器 URL 窗口将显示 POST URL:dir/filter_results_redir.php 并重定向。

删除两个 jQuery 库中的任何一个都可以解决问题,显示的 URL 将更改为 / 并重定向

我尝试了绝对和相对 URL。服务器是 Apache 2.4.18

Request URL: http://rex.local/subapp_search/filter_results_redir.php
Request Method: POST
Status Code: 301 Moved Permanently
Remote Address: 192.143.56.200:80
Referrer Policy: no-referrer-when-downgrade
Connection: Keep-Alive
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Tue, 19 Mar 2019 05:51:07 GMT
Keep-Alive: timeout=5, max=100
Location: /
Server: Apache/2.4.18 (Ubuntu)
Accept: text/html, */*; q=0.01
Accept-Encoding: gzip, deflate
Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7
AlexaToolbar-ALX_NS_PH: AlexaToolbar/alx-4.0.3
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 0
Cookie: user_cls=a%3A9%3A%7Bi%3A0%3Bi%3A961992%3Bi%3A1%3Bi%3A961993%3Bi%3A2%3Bi%3A961994%3Bi%3A3%3Bi%3A961995%3Bi%3A4%3Bi%3A961996%3Bi%3A5%3Bi%3A961997%3Bi%3A6%3Bi%3A961998%3Bi%3A7%3Bi%3A962004%3Bi%3A8%3Bi%3A962005%3B%7D; test_cookie=e8e; new_cl=vfn5kj4stc115ri78td0qt8r13; findix_counter=a%3A5%3A%7Bi%3A0%3Bs%3A6%3A%22961944%22%3Bi%3A1%3Bs%3A6%3A%22961960%22%3Bi%3A2%3Bs%3A6%3A%22961940%22%3Bi%3A3%3Bs%3A6%3A%22960238%22%3Bi%3A4%3Bs%3A6%3A%22961952%22%3B%7D; session_localrexDE=4fb1bbbfa7db5a268d50d6a3ca4fef0b
Host: rex.local
Origin: http://rex.local
Pragma: no-cache
Referer: http://rex.local/subapp_search/filter_results_redir.php
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
X-Requested-With: XMLHttpRequest

【问题讨论】:

只是猜测,试试看:&lt;form action="*Your redir link*" method="POST" data-ajax="false"&gt; 这是一个很好的提示,我也发现了。但是,完全相同的代码行确实有效,而另一行则无效。我不明白。我从另一个页面复制了带有 ajax 信息的表单代码,发现它正在工作,然后我将它添加到我的表单中,但它没有。 30 分钟后,我发现这是完全相同的代码行,但行为不同。 【参考方案1】:

我终于解决了,但我不明白这个问题。同一行代码有效,而另一行无效。

首先要做的是将 data-ajax="false" 添加到代码中。但这并没有解决它。

此代码不起作用:

<form method="post" action="/filter_results_redir.php" data-ajax=”false” >

此代码确实有效:

<form method="post" action="/filter_results_redir.php" data-ajax="false">

看起来完全一样。复制粘贴不行,我一个字一个字地写了一遍,就成功了。

【讨论】:

以上是关于为啥jQuery会阻止propper 301重定向?的主要内容,如果未能解决你的问题,请参考以下文章

阻止 WordPress 从 301 重定向 /index.php 到 /

为啥每次访问 `http://www.iqueen.my` 都会看到 301 重定向?

jQuery Mobile 301 重定向问题

为啥浏览器会为 http://example.com 缓存 301 重定向并将其用于 http://example.com:8080?

301重定向:为啥连接关闭?

为啥我的 301 重定向需要这么长时间?