php扩展关闭时,带有post方法的表单将停止工作


form with post method stops working when php extension is off

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

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

我的问题是,当remove-php规则处于活动状态时,带有POST方法的php表单将停止工作。

我正在使用:

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

表单的in-action属性。

我确信这不是一个与htaccess或浏览器缓存相关的问题,因为我的htaccess regex与GET|POST这两个方法匹配。我正在使用302重定向。

我的表单url是/signup.php,当我键入/signupphp时,它变为/signup,我需要用/signup替换php_SELF吗?

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

根据PHP文档(重点是我的):

$_SERVER['PHP_SELF']

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

而CCD_ 4是

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

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

由于HTTP/1.1的规定,POST数据不能通过重定向携带。虽然有一个重定向代码(307)应该允许POST数据通过重定向携带,但由于潜在的安全漏洞,并非所有服务器都支持它。

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

抛开所有重定向问题不谈,表单提交遇到任何类型的重定向通常都是糟糕的形式(双关语),因为它看起来很"钓鱼"。您应该使用:<?=$_SERVER['REQUEST_URI']; ?>直接提交到有问题的页面,或者干脆不提供操作属性。从HTML 5.0开始,不需要动作属性http://www.w3schools.com/tags/att_form_action.asp.如果你想遵循HTML 4.0标准,action=""也以同样的方式工作,并且符合规范(因为操作是一个相对的url,空白路径意味着"这里")。

您也可以使用此方法

htmlspecialchars(basename($_SERVER["PHP_SELF"], '.php'), ENT_QUOTES, "utf-8")

我只是将扩展名从.php更改为该文件名。例如:-xyz.php到xyz

$.ajax({url:"xyz",data:formData,方法:"POST",beforeSend:function(){$('.cb-submit').attr('disabled','disabled');$("div.errors").css({display:none});},