You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.htaccess移除.php后缀后POST请求仅提交单行表格数据问题

解决POST表单仅提交单行数据的问题(.htaccess移除.php后缀引发)

看起来你的问题根源在于.htaccess里的重定向规则把POST请求转换成了GET,导致大部分表单数据丢失(你看到的单行数据可能是浏览器的特殊处理或个别字段的残留)。咱们一步步来修复:

修正后的.htaccess规则

DirectoryIndex index
RewriteEngine on

# 移除.php后缀,但跳过POST请求,避免重定向丢失数据
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

# 内部补全.php后缀(支持include等场景)
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]

# 添加.html后缀(仅当对应.php和原始文件都不存在时执行)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php !-f
RewriteRule ^([^.]+)$ $1.html [NC,L]

为什么原始规则会出问题?

你的第一条规则会对所有包含.php的请求(包括表单POST提交)执行外部重定向([R]标志)。举个例子:

当你提交表单到your-domain/form.php时,服务器会返回302重定向到your-domain/form,而浏览器会自动把POST请求转换成GET请求来访问新地址——这直接导致POST表单数据丢失,只剩下个别可能被浏览器特殊处理的字段。

另外我给第三条规则加了额外判断,避免它和第二条.php重写规则冲突:只有当请求的文件本身不存在,且对应的.php文件也不存在时,才会添加.html后缀,防止误处理。

额外建议

把你的表单action属性改成不带.php的路径(比如action="form"),这样提交时直接发送POST请求到无后缀的地址,服务器内部重写到form.php,完全不会触发外部重定向,数据就能完整提交了。

内容的提问来源于stack exchange,提问作者Mohamad Hazim Johari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:37:06