Php 为什么发布don';在htaccess中无法处理某些重写条件?

Php 为什么发布don';在htaccess中无法处理某些重写条件?,php,.htaccess,post,mod-rewrite,Php,.htaccess,Post,Mod Rewrite,所有$\u 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 %

所有$\u 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扩展并获得相同的结果?

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

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

您可以在此处了解更多有关差异的信息:

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

R=301
是一个重定向。如果您向该URL发送POST请求,web服务器会将请求重定向(使用GET)到新URL,所有已发布的数据都将被删除(因为GET请求不支持请求正文中的任何内容)。第二条规则是重写,这与重定向不同。您可以在这里了解更多差异:您可以尝试使用
R=308
。这也是一个永久重定向,但它告诉客户端使用相同的http方法。但不确定它的使用/实现有多广泛。@Magnus-你的建议有效。但是关于你所说的,你会期待任何“附带效应”吗?不,不是真的。如果有人对此有问题,大多数是写得不好的客户不遵守标准,老实说,我们不应该关心这些。@MagnusEriksson您应该补充这一点作为答案。此外,OP不应该首先向非规范URL发送POST请求。(广泛支持A 308。)