PHP 如何通过规则或 htaccess 获取可见的查询字符串而不是解析的查询字符串
How to get visible query string and not parsed query string by rules or htaccess in PHP
我有一个url,一部分是通过htaccess转成变量,一部分是GET发送的变量。
mydomain.com/page/5/string?v2=foo&v3=bar
.httaccess 发送 5 作为变量,我们称它为 v1
RewriteRule ^([^/]*)/([0-9]+)/(.*)$ page.php?v1= [L,QSA]
查询字符串的其余部分作为 GET 接收。
?v2=foo&v3=bar
这个例子很直接,但是在实际系统中.htaccess解析的变量不止一个,而且是动态的,
我需要找到一种方法来只获取 GET 中发送的变量,而忽略来自 .htaccess 的变量。
我试过 $_SERVER['QUERY_STRING']
但那个 returns 也是 .htaccess 解析的变量:
echo $_SERVER['QUERY_STRING'] //returns v1=5&v2=foo&v3=bar
我只想得到v2=foo&v3=bar
我认为您可以阅读 $_SERVER['REQUEST_URI']
并使用正确的正则表达式从 URL 获取 GET 变量。然后(如果需要)您可以编写函数将它们拆分为变量数组:
$get = array(); //array for GET values
$uri = $_SERVER['REQUEST_URI'];
$uri_parts = explode('?', $uri, 2);
$get_string = $uri_parts[1]; //[0] is address
$get_pairs = explode('&', $get_string); //split to key=value pairs
foreach($get_pairs as $get_pair){
list($key, $value) = explode('=', $get_pair, 2); //split key and value
$get[$key] = $value;
}
$get_string
包含类似 a=bc&d=ef
的字符串
$get
包含键值对(如 $_GET
)
例子
SetEnv SPECIAL_PATH /foo/bin
http://httpd.apache.org/docs/current/mod/mod_env.html#setenv
I need to find a way to only get the variables sent in GET ignoring the ones from .htaccess.
您可以使用环境变量将原始查询字符串传递到您的 php
文件:
RewriteRule ^([^/]+)/([0-9]+)/(.*)$ page.php?v1= [E=qs:%{QUERY_STRING},L,QSA]
现在在 php 代码中使用此变量访问原始查询字符串:
$_SERVER["REDIRECT_qs"]
这应该打印:
v2=foo&v3=bar
而 $_SERVER["QUERY_STRING"]
将为您提供完整的查询字符串,即 v1=5&v2=foo&v3=bar
我有一个url,一部分是通过htaccess转成变量,一部分是GET发送的变量。
mydomain.com/page/5/string?v2=foo&v3=bar
.httaccess 发送 5 作为变量,我们称它为 v1
RewriteRule ^([^/]*)/([0-9]+)/(.*)$ page.php?v1= [L,QSA]
查询字符串的其余部分作为 GET 接收。
?v2=foo&v3=bar
这个例子很直接,但是在实际系统中.htaccess解析的变量不止一个,而且是动态的,
我需要找到一种方法来只获取 GET 中发送的变量,而忽略来自 .htaccess 的变量。
我试过 $_SERVER['QUERY_STRING']
但那个 returns 也是 .htaccess 解析的变量:
echo $_SERVER['QUERY_STRING'] //returns v1=5&v2=foo&v3=bar
我只想得到v2=foo&v3=bar
我认为您可以阅读 $_SERVER['REQUEST_URI']
并使用正确的正则表达式从 URL 获取 GET 变量。然后(如果需要)您可以编写函数将它们拆分为变量数组:
$get = array(); //array for GET values
$uri = $_SERVER['REQUEST_URI'];
$uri_parts = explode('?', $uri, 2);
$get_string = $uri_parts[1]; //[0] is address
$get_pairs = explode('&', $get_string); //split to key=value pairs
foreach($get_pairs as $get_pair){
list($key, $value) = explode('=', $get_pair, 2); //split key and value
$get[$key] = $value;
}
$get_string
包含类似 a=bc&d=ef
$get
包含键值对(如 $_GET
)
例子
SetEnv SPECIAL_PATH /foo/bin
http://httpd.apache.org/docs/current/mod/mod_env.html#setenv
I need to find a way to only get the variables sent in GET ignoring the ones from .htaccess.
您可以使用环境变量将原始查询字符串传递到您的 php
文件:
RewriteRule ^([^/]+)/([0-9]+)/(.*)$ page.php?v1= [E=qs:%{QUERY_STRING},L,QSA]
现在在 php 代码中使用此变量访问原始查询字符串:
$_SERVER["REDIRECT_qs"]
这应该打印:
v2=foo&v3=bar
而 $_SERVER["QUERY_STRING"]
将为您提供完整的查询字符串,即 v1=5&v2=foo&v3=bar