Apache 301redirect并保留发布数据

我已经实现了SEO的URL使用Apache 301redirect到一个“redirect.cfm”的网站的根,处理所有的URL构build和内容交付。

发布数据在301redirect期间丢失。

目前为止无法find解决scheme,试图从重写中排除post方法 – 最糟糕的情况是我们可以使用旧types的URL来进行post方法。

有什么可以做的吗?

谢谢

POST数据在redirect时被丢弃,因为客户端将执行对由“301”指定的URL的GET请求。

唯一的select是将POST参数转换为GET参数并将其粘贴到要redirect到的URL的末尾。 这不能在.htaccess文件重写中完成。

一种方法是捕获POST请求到被redirect的url,并把它传递给一个页面来处理redirect。 你需要在代码中进行参数的换位,然后用附加参数的url来发送redirect头。

更新:正如在这个答案的评论中指出的那样,如果你redirect到指定POST参数的另一个URL,并且这个URL也没有参数被访问(或者参数是可变的),你应该指定一个指向页面规范URL的链接。

假设POST表单redirect转换为以下GET资源:

http://www.example.com/finalpage.php?form_data_1=123&form_data_2=666 

您可以将此链接logging添加到页面的头部部分:

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

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

使用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 

– 维基百科

使用301redirect来进行一般的URL重写是不行的。 这是一个性能问题(特别是对于移动设备,但一般来说),因为它会使页面的请求数量翻倍。

考虑使用像Tuckey的URLrewriteFilter或Apache mod_rewrite这样的URL重写工具。

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