删除PHP扩展而不丢失数据发布

删除PHP扩展而不丢失数据发布,php,.htaccess,redirect,post,Php,.htaccess,Redirect,Post,这是我的问题。我有以下代码要删除.htaccess中的.php扩展名: RewriteEngine on RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule ^ /%1 [NC,L,R] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [NC,L] 但是当我的页面请求内部post请求时,数据就会丢失。 我知道重定向会这样做,但我不知道

这是我的问题。我有以下代码要删除.htaccess中的.php扩展名:

RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
但是当我的页面请求内部post请求时,数据就会丢失。
我知道重定向会这样做,但我不知道如何修复它。

尝试添加
QSA
标志我尝试了QSA标志,但不起作用!您将丢失POST数据,因为浏览器通过发出GET请求来遵循301/302状态代码附带的重定向。307/308将是保留请求方法的正确状态代码。但是你通常不会从外部重写POST请求,因为浏览器必须再次发送所有数据,所以你的流量实际上会翻一番。在这种情况下,您通常会使用额外的RewriteCond来检查request方法并防止重定向(如果是POST),这是一种解决方案。尝试添加
QSA
标志我尝试了QSA标志,但不起作用!您将丢失POST数据,因为浏览器通过发出GET请求来遵循301/302状态代码附带的重定向。307/308将是保留请求方法的正确状态代码。但是你通常不会从外部重写POST请求,因为浏览器必须再次发送所有数据,所以你的流量实际上会翻一番。在这种情况下,您通常会使用额外的RewriteCond来检查请求方法,并防止重定向(如果是POST)。