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

时间:2012-11-29 15:13:43

标签: apache rewrite http-post http-status-code-301

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

在301重定向期间,帖子数据会丢失。

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

有什么可以做的吗?

由于

3 个答案:

答案 0 :(得分:51)

使用307应为exactly what you want

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

- Wikipedia

答案 1 :(得分:20)

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

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

   <link rel="canonical" href="http://www.example.com/finalpage.php" />

这样可以确保所有搜索引擎优化价值都会提供给http://www.example.com/finalpage.php,并避免重复内容出现问题。

答案 2 :(得分:0)

使用301重定向进行常规URL重写是不可取的。 这是性能问题(特别是对于移动设备,但一般而言),因为它会使页面请求的数量翻倍。

考虑使用像Tuckey的URLrewriteFilter或apache mod_rewrite这样的网址重写工具。

雷说的都是真的,这只是对你的一般方法的补充评论。