我使用Apache htaccess文件中的以下指令隐藏了php文件扩展名
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
我有一个像这样的简单html表单
<form action="register.php" method="post">
<input type="text" name="name">
<input type="submit">
</form>
在我的PHP页面中,这是我之前检查表单是否已发布的方式
if ($_SERVER["REQUEST_METHOD"] == "POST") {
/* code to process the post */
}
但是因为我添加了htaccess指令来隐藏php文件扩展名&#34; POST&#34;成为&#34; GET&#34;以上代码永远不会执行。有没有一个好方法来处理这个?我知道这是导致这种情况的内部重定向,但有一种优雅的方式来处理这个问题吗?我出于显而易见的原因,我不想使用以下方法
if (isset($_POST['submit'])) {
答案 0 :(得分:2)
POST
不会成为GET
,这是由于您的第一个重定向规则:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
其中包含.php
的请求,并重定向到其中没有.php
的网址。在您按照此规则重定向后,您正在查看$_SERVER["REQUEST_METHOD"]
。
要解决这个问题:
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
即。不要重定向POST
请求,以避免POST
数据丢失。
答案 1 :(得分:0)
也许有人遇到了ajax调用的问题。
在这种情况下,我有一个 [L,R] 的重写规则。必须只有 [L] 否则“POST 变为 GET”。