移除PHP后缀的.htaccess配置问题:目录访问失败且POST数据丢失
解决.htaccess移除.php后缀时POST数据丢失及目录访问问题
你的问题核心在于两点:POST请求被强制转为GET导致数据丢失,以及规则路径匹配未适配app目录的部署位置。以下是修正后的配置:
RewriteEngine On # 仅对GET请求重定向移除.php后缀,保留POST请求的数据与方法 RewriteCond %{REQUEST_METHOD} GET RewriteCond %{THE_REQUEST} /([^/.]+)\.php [NC] RewriteRule ^ %1 [NC,L,R=301] # 内部重写:将无.php后缀的请求映射到对应.php文件(仅文件存在时生效) RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [NC,L] # 目录访问默认指向index.php DirectoryIndex index.php
关键修改说明:
- 新增
RewriteCond %{REQUEST_METHOD} GET:只对GET请求做URL重定向,POST请求直接跳过该规则,避免请求方法变更导致数据丢失。 - 调整捕获组为
([^/.]+):适配.htaccess在app目录的场景,避免错误捕获目录前缀。 - 内部重写规则改为
^(.*)$ $1.php:更灵活匹配所有请求路径,确保app目录下的所有.php文件都能被正确映射。 - 添加
DirectoryIndex index.php:访问app目录时自动指向index.php,解决目录直接访问的问题。
内容的提问来源于stack exchange,提问作者Cross Vander
相关产品推荐
相关产品推荐

