首页 > 解决方案 > 为什么 POST 不适用于 htaccess 中的某些重写条件?

问题描述

所有 $_POST 都不适用于此 .htaccess 代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

// ========================== this code too is in place, but it seems not to impact on $_POST
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
// =================================================

知道为什么会出现这样的问题吗?对于 php 扩展,我能做些什么来解决并获得相同的结果?

标签: php.htaccesspostmod-rewrite

解决方案


R=301是重定向。如果您向该 URL 发送 POST 请求,Web 服务器会将请求(使用 GET)重定向到新 URL,并且所有发布的数据都将被删除(因为 GET 请求不支持请求正文中的任何内容)。

第二条规则是重写,它与重定向不同。

您可以在此处了解有关差异的更多信息:https ://stackoverflow.com/a/12399668/2453432

解决方案

改为使用R=308。这也是一个永久重定向,但它告诉客户端对新请求使用相同的 http 方法。


推荐阅读