我在 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
并重定向到一个没有的 URL.php
在里面。你正在看$_SERVER["REQUEST_METHOD"]
被这条规则重定向后.
要修复它,请这样:
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
即不重定向POST
要求避免POST
数据丢失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)