Apache 301重定向并保留发布数据

Dan*_*ook 24 apache rewrite http-post http-status-code-301

我已经使用Apache 301重定向将SEO URL实现到网站根目录中的"redirect.cfm",该网站处理所有URL构建和内容交付.

在301重定向期间,发布数据会丢失.

到目前为止还无法找到解决方案,尝试从重写中排除post方法 - 最坏的情况我们可以使用旧类型的URL来进行post方法.

有什么可以做的吗?

谢谢

Has*_*own 53

使用a 307应该是你想要的

307 Temporary Redirect (since HTTP/1.1)
In this case, the request should be repeated with another URI; however, future requests
should still use the original URI.[2] In contrast to how 302 was historically implemented,
the request method is not allowed to be changed when reissuing the original request. For
instance, a POST request should be repeated using another POST request
Run Code Online (Sandbox Code Playgroud)

- 维基百科

  • 我添加了这个:RewriteCond%{REQUEST_METHOD} = POST然后在下一行,这个:RewriteRule /my-app/(.*)$/ $ 1 [R = 307] (5认同)
  • 这很有效,只需将307重定向应用于POST请求,即可保持301重定向的效率 (2认同)
  • 伙计,这真的让我潜伏了几个小时.只需向**Laravel**或**Lumen**及其"重定向尾随斜线如果不是文件夹"的问题添加一些关键字.此外,这个答案对于开发**API**的人特别有用. (2认同)

Ray*_*Ray 22

POST数据在重定向时被丢弃,因为客户端将对301指定的URL执行GET请求.期间.

唯一的选择是将POST参数转换为GET参数,并将它们添加到您重定向到的URL的末尾.这不能在.htaccess文件重写中完成.

一种选择是捕获要重定向的URL的POST请求,并将其传递给页面以处理重定向.您需要在代码中进行参数的转置,然后发出重定向标头,其中参数附加了新的url.

更新:正如对此答案的评论中所指出的,如果您重定向到指定POST参数的另一个URL,并且该URL也在没有参数的情况下访问(或者参数是可变的),则应指定该页面的规范URL的链接.

假设POST表单重定向转置为以下GET资源:

   http://www.example.com/finalpage.php?form_data_1=123&form_data_2=666
Run Code Online (Sandbox Code Playgroud)

您可以将此链接记录添加到页面的head部分:

   <link rel="canonical" href="http://www.example.com/finalpage.php" />
Run Code Online (Sandbox Code Playgroud)

这将确保所有SEO值都将提供给http://www.example.com/finalpage.php,并避免重复内容可能出现的问题.