10

我有两个分开的虚拟主机。在万维网。一,我在 .htaccess 上安装了这一行

redirectMatch 301 ^(.*)$ http://d_blur_blur_s.com$1

除了将 POST 转换为 GET 的情况外,一切都按预期工作。
请注意,帖子有参数作为获取(我没有这样做,我不会更改它)我只是想避免重复的内容。我正在显示萤火虫痕迹。

我希望通过 redirectmatch 或其他技巧将 POST 重定向到主域。

萤火虫踪迹

更新
我在网站上有一半的内部链接写有 www,另一半没有。所以我需要保持公开但不重复。我需要将 GET 作为 GET 转发,将 POST 作为 POST 转发。问题很大,我有 12000 页索引,还有很多表格。所以我首先在不更改代码的情况下寻找通用解决方案。我完全控制服务器。

非常感谢

4

6 回答 6

7

您使用 307 而不是 301 进行重定向来保留帖子数据,但是如果用户确定要发送帖子数据,某些浏览器会向用户显示一个对话框,因此并不漂亮。

但我宁愿从根本上解决问题。如果 html-form 引用了错误的域(例如<form action="www.d_blur_blur_s/public/main/loginGenerator.php" ...),您会得到一个错误域的帖子的唯一方法。只需修复html。

不要担心重复的内容,因为搜索引擎从不发送后期请求,只会获取。您当前的解决方案应该可以防止重复的内容。

于 2012-05-16T18:08:15.693 回答
7

无论是 POST 还是 GET 请求,服务器对您发出的任何请求的重定向响应总是会导致您的客户端发出 GET 请求(除非您以某种方式使其不会自动跟随重定向——有时我使用 curl 执行此操作,但我不知道任何具有此功能的广泛使用的浏览器可供用户轻松使用)。客户端浏览器获取重定向提供的 URL 并将其视为 URL 以执行 GET 请求。没有办法,POST 数据被服务器丢弃,因为它是为原始 URL 上的服务器资源准备的。

如果您在 .htaccess 之外重定向,例如在 PHP 文件中构建重定向响应,您唯一的选择是将 POST 参数转换为 GET 参数字符串并将其添加到您发送回客户端的 URL 的末尾重定向响应。

我相当有信心,无论您使用重定向指令还是通过 mod_rewrite 模块的重写指令,都无法在 .htaccess 文件或 httpd.conf 文件中进行自动 POST 参数附加到重定向。

于 2012-05-14T15:57:25.243 回答
4

进行重定向和保留 POST 数据(我知道)的唯一方法是将 mod_rewrite 与 mod_proxy 一起使用,然后P在 RewriteRule 中使用标志。

在您的www主机上启用mod_rewrite、mod_rewrite 和 .htaccesshttpd.conf然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^ http://d_blur_blur_s.com%{REQUEST_URI} [P]
于 2012-05-18T15:19:03.647 回答
2

我也碰到了这个 POST->GET 重写。像这样的 API 调用:

  curl -X POST https://example.com/api/user/123456789

正在使用 GET 请求方法进入我的 API 框架。

原因似乎与带有空正文的 POST 请求有关。为避免此问题,您可以设置Content-Length标题:

  curl -X POST https://example.com/api/user/123456789 -H 'Content-Length: 0'

或在体内传递一些东西:

  curl -X POST https://example.com/api/user/123456789 -d ''
于 2016-12-04T23:06:55.160 回答
0

将 www 添加到基本 URL 为我做了。

于 2021-09-13T12:39:55.503 回答
0

在 HTTP 1.1 中,statusCode (307) 表示应该使用相同的方法重复请求并发布数据。更改重定向类型以修复它。 在此处输入图像描述

于 2019-05-29T10:17:54.933 回答