使用post方法的表单在php扩展关闭时停止工作

时间:2015-12-04 03:16:38

标签: php

在我的网站上,我使用htaccess url重写从php文件中完全删除php扩展。

完全删除Php扩展名,/ file.php映射到/ file。

我的问题是当删除php规则处于活动状态时,使用POST方法的php表单停止工作。

我正在使用:

 action="<?php echo $_SERVER["PHP_SELF"]?>"

在表格的行动属性中。

我确信这不是htaccess或浏览器缓存相关的问题,因为我的htaccess正则表达式匹配两种方法GET | POST。我正在使用302来重定向。

我的表单网址是/signup.php,当我输入/signup.php时,它会导致/ signup,我是否需要在操作属性中用/ signup替换PHP_SELF?

3 个答案:

答案 0 :(得分:2)

您应该使用$_SERVER["REQUEST_URI"]而不是$_SERVER["PHP_SELF"]

根据PHP documentation(强调我的):

$_SERVER['PHP_SELF']

  

当前正在执行的脚本的文件名,相对于   文件根。

$_SERVER['REQUEST_URI']

  

为了访问此页面而提供的 URI ;   例如,&#39; /index.html'。

由于您要重写URL以删除.php扩展名,因此您不应再引用包含扩展名的脚本文件名,而是引用当前页面的URI。

答案 1 :(得分:1)

由于HTTP / 1.1规定,POST数据无法通过重定向传输。虽然存在重定向代码(307),其应允许通过重定向来传送POST数据,但由于潜在的安全漏洞,并非所有服务器都支持它。

另请注意,302和307都被声明为“临时”重定向,这意味着在将来的某个时刻,它不会被发送,因为应该发送一个缓存控制标头,指示何时应该检查它是否已经改变。您在此处执行的重定向类型似乎更像是永久性更改,在这种情况下应该发送301。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

除了所有重定向问题之外,表单提交通常是糟糕的形式(双关语),以达到任何类型的重定向,因为它看起来像“phishy”。您应该直接向相关网页提交:<?=$_SERVER['REQUEST_URI']; ?>,或者根本不提供操作属性。从HTML 5.0开始,不需要action属性http://www.w3schools.com/tags/att_form_action.asp。如果您想遵循HTML 4.0标准,action=""也可以以相同的方式工作,并且与规范相符(因为操作是相对URL,空白路径表示“此处”)。

答案 2 :(得分:0)

您也可以使用此方法

 @Inject lateinit var networkConnectivity: NetworkConnectivityHelper