使用.htaccess移除PHP后缀时POST请求出现Undefined index错误
解决移除PHP后缀时POST请求丢失参数的问题
问题原因
你当前的.htaccess规则中,访问带.php后缀的URL会触发302重定向到无后缀版本,但302重定向会自动将POST请求转换为GET请求,导致原本通过POST传递的email、password等参数丢失,因此PHP脚本会报Undefined index错误。
解决方案
修改重定向规则,仅对GET请求执行跳转,POST请求直接进入内部重写逻辑以保留参数:
RewriteEngine On # 仅针对GET请求,将带.php的URL重定向到无后缀版本 RewriteCond %{REQUEST_METHOD} GET RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule (.*) /%1 [R=302,L] # 内部重写无后缀URL到对应的.php文件 RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php
说明
- 新增的
RewriteCond %{REQUEST_METHOD} GET条件限制重定向仅作用于GET请求,POST请求不会被跳转,直接匹配内部重写规则,POST参数可正常传递到PHP脚本。 - 若需永久重定向(更友好的搜索引擎处理),可将
R=302改为R=301。
内容的提问来源于stack exchange,提问作者joisberg
相关产品推荐
相关产品推荐

