Php 在URL中传递问号在live server上不起作用,但在本地服务器上起作用

Php 在URL中传递问号在live server上不起作用,但在本地服务器上起作用,php,apache,.htaccess,mod-rewrite,url-encoding,Php,Apache,.htaccess,Mod Rewrite,Url Encoding,我有一个搜索引擎优化友好的网址,其中包含一个网址编码的新闻标题。我们使用mod_rewrite拆分URL并将不同的参数传递给PHP: RewriteEngine On RewriteBase / RewriteRule ^news/([^/]*)/([^/]*)$ /index\.php\?content=news&newsId=$1&title=$2&%{QUERY_STRING} [L] 这样,我们可以使用PHP访问标题字符串,例如使用$\u请求['title']

我有一个搜索引擎优化友好的网址,其中包含一个网址编码的新闻标题。我们使用mod_rewrite拆分URL并将不同的参数传递给PHP:

RewriteEngine On
RewriteBase /

RewriteRule ^news/([^/]*)/([^/]*)$ /index\.php\?content=news&newsId=$1&title=$2&%{QUERY_STRING} [L]
这样,我们可以使用PHP访问标题字符串,例如使用
$\u请求['title']

如果标题字符串包含问号,我们的开发系统(WAMP)仍将在
$\u REQUEST['title']
中包含整个标题字符串。但我们的生产系统(LAMP)将在第一次出现问号之前切断连接

谁知道是哪种配置导致了这种行为?这是Apache设置还是PHP设置

例子 测试标题:

echo var_export($_REQUEST['title'],true);
'Why do we do this? In order to test'
'Why do we do this'
我们为什么要这样做?为了测试

测试URL:

echo var_export($_REQUEST['title'],true);
'Why do we do this? In order to test'
'Why do we do this'
/news/123/Why+do+we+do+this%3F+In+order+to+test

测试脚本:

echo var_export($_REQUEST['title'],true);
'Why do we do this? In order to test'
'Why do we do this'
本地服务器上的输出:

echo var_export($_REQUEST['title'],true);
'Why do we do this? In order to test'
'Why do we do this'
实时服务器上的输出:

echo var_export($_REQUEST['title'],true);
'Why do we do this? In order to test'
'Why do we do this'

尝试或使用
%{the_REQUEST}
而不是
%{QUERY_STRING}
。我猜两台服务器上的Apache版本不一样?谢谢你的提示,@ishegg。我以前从未使用过B标志,但它不能解决问题。如果我添加它,live server的输出将变成
Why+do+we+do+this
QSA
标志如何?@ishegg否,也不起作用。另外,
QSA
在有两个问号时会故意表现出不同的行为,这是我不想要的。我希望Apache不要“看到”字符串中的问号。实时系统:Apache/2.4.27(Unix)本地系统:Apache/2.4.16(Win64)使用
%{the_REQUEST}
而不是
%{QUERY_string}
尝试or。我猜两台服务器上的Apache版本不一样?谢谢你的提示,@ishegg。我以前从未使用过B标志,但它不能解决问题。如果我添加它,live server的输出将变成
Why+do+we+do+this
QSA
标志如何?@ishegg否,也不起作用。另外,
QSA
在有两个问号时会故意表现出不同的行为,这是我不想要的。我希望Apache不要“看到”字符串中的问号。实时系统:Apache/2.4.27(Unix)本地系统:Apache/2.4.16(Win64)