是否可以重写带有问号的网址?
例如,
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
)
%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] => tag=mars
)
[type] => tag
)
答案 0 :(得分:2)
RewriteRule
内无法匹配查询字符串。您必须改为使用RwwriteCond
:
RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]+)
RewriteRule ^search$ index.php?url=search&tag\%5Bkey_name\%5D=%1&type=tag [L]
下面:
[
和]
已被urlencoded为%5b
和%5D
\%
用于转义文字%
字符%0
... %9
是RewriteCond
子句中匹配/捕获的字符串。这就是您对$0
$9
... RewriteRule
的方式
QSA
标志不是必需的(^|&)
匹配输入的开头(例如tag=mars&foo=bar
}或&
(例如foo=bar&tag=mars
} ?:
使mod_rewrite 无法捕获此群组(其他此匹配将进入%1
,下一个进入%2
等)您的PHP脚本将获得:
$_GET["url"] : search
$_GET["tag"] : Array([key_name] => mars)
$_GET["type"] : tag