在htaccess中标记查询字符串并在PHP中检索

在htaccess中标记查询字符串并在PHP中检索,php,apache,.htaccess,mod-rewrite,query-string,Php,Apache,.htaccess,Mod Rewrite,Query String,这是我的.htaccess: RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} !^$ RewriteRule .* - [L] RewriteCond %{QUERY_STRING} ^(.+)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)\?(.+)$ RewriteRule .* - [ENV=HASQSTRING:1] # miscellaneous rewriterules to redirect

这是我的.htaccess:

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule .* - [L]

RewriteCond %{QUERY_STRING} ^(.+)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)\?(.+)$
RewriteRule .* - [ENV=HASQSTRING:1]

# miscellaneous rewriterules to redirect pages. 
# No environment variables changed here
这是我的PHP代码:

<?php
    echo "QS=".$_ENV['HASQSTRING'];
?>
<?php
    echo "QS=".$_SERVER['HASQSTRING'];
?>
我测试的URL总是有一个查询字符串,例如:

http://localhost.local/?a=1
http://localhost.local/?a=1&b=2
http://localhost.local/help/?a=1&b=2
如何修复我的.htaccess,以便当原始URL(而不是mod_rewrite生成的内部重定向URL)中存在查询字符串时,HASQSTRING的值等于1


我已尝试检查REDIRECT_STATUS的值,但它总是希望返回200的值。

您可以这样使用它:

RewriteCond %{ENV:REDIRECT_STATUS} .
RewriteRule ^ - [L]

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^ - [E=HASQSTRING:%1]
然后在PHP代码中使用

<?php
    echo "QS=" . $_SERVER['HASQSTRING'];
?>

<?php
    echo "QS=" . $_SERVER['HASQSTRING'];
?>