我在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文件扩展名,"POST"变成了"GET",上面的代码永远不会执行。有什么好办法处理这个问题吗?我知道是内部重定向导致了这种情况,但有没有一种优雅的方法来处理这种情况?我不想使用下面的方法,原因很明显
if (isset($_POST['submit'])) {
POST
不会变成GET
,这是由于您的第一个重定向规则:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s([^.]+)'.php [NC]
RewriteRule ^ %1 [R,L,NC]
它捕获一个包含.php
的请求,并重定向到一个不包含.php
的URL。您看到的是$_SERVER["REQUEST_METHOD"]
在被此规则重定向后。
修复方式如下:
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s([^.]+)'.php [NC]
RewriteRule ^ %1 [R,L]
即不重定向CCD_ 6请求以避免CCD_。
可能有人对ajax调用有问题。
在这种情况下,我有一个用[L,R]重写的规则。它必须只有[L],否则";POST变为GET;。