目标网址上未收到发布数据

时间:2017-03-21 11:30:48

标签: php .htaccess http post http-status-code-301

我有一个方案,其中http://www.omsite.com上的表单上的数据将在其他网站上发布http://www.hissite.com/myfolder

现在,无论何时发布数据,而不是发布或获取状态代码200,我都会获得301状态代码以进行永久重定向,因此数据未发布。

检查目标网址我将其从http://www.hissite.com/myfolder更改为http://www.hissite.com/myfolder/,是的,我在/ myfolder之后只添加了一个斜杠,并且我得到了成功的响应。

我需要一些帮助,了解如何在目标网址末尾添加正斜杠,以便我的数据成功发布?

注意:目标网页是源网页的子域

3 个答案:

答案 0 :(得分:3)

  

我需要一些帮助,了解如何在目标网址末尾添加正斜杠,以便我的数据成功发布?

这种情况正在发生,因为目标网站上的myfolder真实目录。由于安全原因,Apache中有一个名为mod_dir的模块负责此行为。

  1. 每当有真实目录的请求没有斜杠时,mod_dir会使用301状态代码重定向到相同的URI和尾部斜杠。
  2. 一旦301重定向发生,POST数据就会丢失。
  3. 当您使用http://www.hissite.com/myfolder/ POST数据时,mod_dir没有进入图片,因为您的URI已经有一个尾部斜杠,因此没有重定向,也没有丢失POST数据。
  4. 可以使用以下方式更改此行为:

    DirectorySlash Off
    

    但它被认为是潜在的安全风险,因为它可能会泄露目录内容。

答案 1 :(得分:2)

由于搜索引擎可能相当困难,因为重复内容问题,同一页面的不同网址版本上的内容被视为重复,许多网站管理员make any directory page have a trailing slash

现在任何非尾随斜杠目录都会重定向到斜杠版本,您可能会发现index.html,index.php等也会重定向到尾部斜杠版本。

但这意味着服务器上有一个策略(例如.htaccess规则)强制301重定向并阻止POST工作。

answers here显示收件人如何管理它。

答案 2 :(得分:1)

@anubhava在我打字的时候提交了他,他的解释是正确的。 我可以添加更多细节:

这取决于您的服务器设置。一个特别是DirectorySlash。 大约两年前,我有一个学习曲线试图POST到我创建的API端点。

如果您没有在文件夹名称的末尾加上斜杠,服务器可以认为您所指的文件夹实际上是一个文件(如果它实际存在与否则无关紧要)。这就是为什么它没有尝试访问任何"索引"在其中的文件以及为什么请求似乎不起作用。 DirectorySlash设置告诉Apache如果URL不是文件(没有扩展名),则在URL的末尾添加斜杠,然后通过这样做,它将尝试查找"索引"文件里面。

另一个名为DirectoryIndex的设置可用于指定" index"的类型。您要搜索的文件。

如果为斜杠的附加发出了错误的重定向,则_POST数据可能会丢失 - 最常见的情况是在.htaccess中使用mod_rewrite并且您没有告诉它正确重定向。

简而言之,如果您的服务器没有被告知自动将斜杠添加到URL的末尾,则通常将其视为没有扩展名的文件。

这里是Apache设置和其他信息的链接: https://httpd.apache.org/docs/2.4/mod/mod_dir.html