Php 如何用问号重写url?
是否可以重写带有问号的url 比如说,Php 如何用问号重写url?,php,regex,apache,mod-rewrite,query-string,Php,Regex,Apache,Mod Rewrite,Query String,是否可以重写带有问号的url 比如说, http://localhost/mysite/search?tag=mars 变成这样, index.php?url=search&tag[key_name]=mars 我试过了,但一点用都没有 RewriteRule ^search?tag=([a-zA-Z0-9\-]+)/?$ index.php?url=search&tag[key_name]=$1&type=tag [L,QSA] 有什么建议吗 编辑: 对于%1
http://localhost/mysite/search?tag=mars
变成这样,
index.php?url=search&tag[key_name]=mars
我试过了,但一点用都没有
RewriteRule ^search?tag=([a-zA-Z0-9\-]+)/?$ index.php?url=search&tag[key_name]=$1&type=tag [L,QSA]
有什么建议吗
编辑:
对于%1
RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%1&type=tag [L]
结果,
print_r($_GET);
Array
(
[url] => search
[tag] => Array
(
[key_name] =>
)
[type] => tag
)
print_r($_GET);
Array
(
[url] => search
[tag] => Array
(
[key_name] => tag=mars
)
[type] => tag
)
对于%0
RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%0&type=tag [L]
结果,
print_r($_GET);
Array
(
[url] => search
[tag] => Array
(
[key_name] =>
)
[type] => tag
)
print_r($_GET);
Array
(
[url] => search
[tag] => Array
(
[key_name] => tag=mars
)
[type] => tag
)
无法在
重写规则
中匹配查询字符串。您必须改用rwritesecond
:
RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%1&type=tag [L]
在这里:
和[
编码为]
和%5b
%5D
用于转义文本\%
字符%
<代码>%9是在%0
子句中匹配/捕获的字符串。这正是您使用RewriteCond
<代码>9美元用于$0
重写规则
标志不是必需的QSA
匹配输入的开头(例如在(^ |和)
)或tag=mars&foo=bar
和
(例如在
)foo=bar&tag=mars
使mod_rewrite无法捕获此组(其他此匹配将进入?:
,下一个进入%1
,等等)%2
$_GET["url"] : search
$_GET["tag"] : Array([key_name] => mars)
$_GET["type"] : tag
%{QUERY\u STRING}
与路径分开处理。使用RewriteCond
。可能重复感谢您的回答。我刚试过,但是mars
没有被传递到键的名称中。%1
是什么意思?感谢您的更新。我在key\u name
中仍然一无所获。。。我不明白!你能做一个var\u转储($\u GET)
并发布结果吗?谢谢。我已经把结果放在上面的编辑中了。使用%0
,我得到了一个有趣的结果。我认为这与(?:^ |&)tag=([^&]+)
有关。我能问一下-什么是(?:^ |&)
和([^&]+)
意思吗?