Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache301重定向和保存post数据_Apache_Rewrite_Http Post_Http Status Code 301 - Fatal编程技术网

Apache301重定向和保存post数据

Apache301重定向和保存post数据,apache,rewrite,http-post,http-status-code-301,Apache,Rewrite,Http Post,Http Status Code 301,我已经使用Apache301重定向到网站根目录中的“redirect.cfm”实现了SEO URL,它处理所有URL构建和内容交付 在301重定向期间,Post数据丢失 到目前为止找不到解决方案,我们尝试将post方法排除在重写之外-最坏的情况是,我们可以将旧类型的URL用于post方法 有什么可以做的吗 谢谢,重定向时会丢弃POST数据,因为客户端将对301指定的URL执行GET请求。句号 唯一的选择是将POST参数转换为获取参数,并将它们固定到要重定向到的URL的末尾。这不能在.htacce

我已经使用Apache301重定向到网站根目录中的“redirect.cfm”实现了SEO URL,它处理所有URL构建和内容交付

在301重定向期间,Post数据丢失

到目前为止找不到解决方案,我们尝试将post方法排除在重写之外-最坏的情况是,我们可以将旧类型的URL用于post方法

有什么可以做的吗


谢谢,重定向时会丢弃POST数据,因为客户端将对301指定的URL执行GET请求。句号

唯一的选择是将POST参数转换为获取参数,并将它们固定到要重定向到的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
您可以将此链接记录添加到页面的标题部分:

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


这将确保所有SEO价值都被赋予,并避免重复内容可能出现的问题。

使用301重定向进行一般URL重写不是一条可行之路。 这是一个性能问题(特别是对于移动设备,但通常也是如此),因为它会使页面的请求数量翻倍

考虑使用一个URL重写工具,如Tuckey的
URLrewriteFilter
或apache
mod_rewrite


Ray所说的都是真的,这只是对您的一般方法的补充说明。

使用
307
应该是正确的


-

实际上,另一种解决方案,对我来说更好的方法是计算表单和操作的目标SEO URL。额外的查询,但URL将被保留,不需要301重定向。谢谢,我假设这样做可以使登录表单在浏览器URL栏中显示用户名/密码。我正在引导自己更新每个表单,以便将其发布到计算出的动态SEO URL。@DanielCook如果重定向到同一个域URL,而您不希望将post变量放在URL中,您也可以将post变量放在会话中。只是别忘了在发出重定向之前强制刷新会话。我不认为GET参数会影响URL的搜索引擎优化,但是,它在视觉上会很难看。谢谢,也许这会奏效。Apache将所有post请求发送到“redirectPost.cfm”,这将表单数据存储在session.form中,并重定向URL(丢失post数据)。一旦'redirect.cfm'拾取它,它会在交付内容之前将所有session.form数据写回表单作用域。Doh刚刚意识到重定向到'redirectPost.cfm'将丢失post数据。也许是另一种重定向,307?保留post数据,我将不得不查找。@DanielCook如果不重定向到重定向处理程序页面,只需在该页面上执行一次重定向即可。No rediect 30x保留post参数此功能有效,您只需将307重定向应用于post请求,即可保持301重定向的效率only@chrismarx你是怎么做到的?我添加了:RewriteCond%{REQUEST_METHOD}=POST,然后在下一行,这个:RewriteRule/my app/(.*)$/$1[R=307]是的,它也适用于我。但有些事情真的很奇怪:使用完全相同的规则,通过将R=301更改为R=307,重写规则的工作方式就不一样了!伙计,这真的帮我省了几个小时的时间。只需向可能存在Laravel或Lumen问题的人添加一些关键字,如果不是文件夹,则其
重定向尾部斜杠。此外,这个答案对开发API的人特别有用。我已经看过上面的内容,试图了解可能的情况。示例建议标准URL:重写URL:但是,我的URL将是domain.com/folder1/folder2/folder3/index.cfm?id=12345,并解析为domain.com/area/id-title-of-the-article/该信息在DB中不可用,需要一些DB查询来确定title和area.Hi。我非常感谢你的回复。我有一个重定向页面:不幸的是,当它重定向新的URL时,看起来是这样的:它在一个奇怪的URL之后包含原始URI?查询参数的字符。我需要删除这些,但我不能。你知道吗?
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