为什么在.htaccess中使用[QSA]时$\u POST为空?

为什么在.htaccess中使用[QSA]时$\u POST为空?,.htaccess,mod-rewrite,post,qsa,.htaccess,Mod Rewrite,Post,Qsa,我在.htaccess中获得了以下内容: RewriteCond %{REQUEST_URI} !app/index\.php$ RewriteRule ^(.*\.htm)$ index.php?url=$0 [QSA,L] 一切都很好,但是结果URL有空的$\u帖子 我百分之百确定这是mod_rewrite bug,而不是HTML或PHP,因为当我将[QSA,L]更改为[L]时,效果非常好。但我真的需要QSA 它发生在大约30%的主机上,因此这可能是一些Apache配置选项。用这种方式修改

我在.htaccess中获得了以下内容:

RewriteCond %{REQUEST_URI} !app/index\.php$
RewriteRule ^(.*\.htm)$ index.php?url=$0 [QSA,L]
一切都很好,但是结果URL有空的$\u帖子

我百分之百确定这是mod_rewrite bug,而不是HTML或PHP,因为当我将[QSA,L]更改为[L]时,效果非常好。但我真的需要QSA


它发生在大约30%的主机上,因此这可能是一些Apache配置选项。

用这种方式修改规则怎么样。它改变了什么吗

RewriteRule ^(.*)\.htm$ index.php?url=$0.htm [QSA,L]

我确实有这个问题。它在一台服务器上工作,而不是在下一台服务器上工作。至少可以说,这很烦人,也很费时

使用此php进行大量检查后:

foreach ($_REQUEST AS $key => $value) echo $value."<br>";
foreach($\请求为$key=>$value)echo$value。“
”;
在index.php的顶部,为了检查从htaccess文件发送的值(以及我将不进行的许多其他检查!),我最终发现您需要指定“RewriteBase”

RewriteBase/
添加到htaccess文件的顶部,可以在我尝试的所有服务器上运行

(另外,请记住设置为:
RewriteBase/文件所在的文件夹/
其中“folder where file is”是index.php文件的位置(如果在子文件夹中)


希望它能帮助你-知道这肯定会帮助我很多小时前

默认情况下,。。可能apache没有启用mod_rewrite,请尝试在控制台上键入此命令

sudo a2enmod重写

示例my.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.php
</IfModule>

重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php?/$1[L]
ErrorDocument 404/index.php

您能检查一下$\u请求(包括$\u GET和$\u POST)中是否有可用的内容吗?我很好奇您的$\u POST值是否正在转换为$\u GET值……是的,我已经检查过了$_请求中只填充了$\u GET值在查询中让我困惑了几次的是$0而不是$1strange。根据服务器版本,服务器之间是否存在差异?或者它是随机发生的?这不是问题的答案。它不能回答问题。问题是使用[QSA]时POST参数丢失。