要重写URL一个从给定用户前缀(“U盘”)
https://example.com/access/check?user=u-abc&pass=123
在没有前缀的网址:
https://example.com/access/check?user=abc&pass=123
我试了几个规则,例如
RewriteBase /
RewriteRule ^access/check?user=u-(.*)$ check?user=$1
我坚持用“?”
“?”如果重写必须适用于轻微相同,但没有,它确实工作:
https://example.com/access/checkuser=u-abc&pass=123
RewriteRule ^access/checkuser=u-(.*)$ checkuser=$1
并提供了预期的结果(未经用户前缀“U盘”)
checkuser=abc&pass=123
我试图匹配“?” 与[?]或\ X3F,并且如上所述施加的QSA标志mod_rewrite.org ,但仍然没有成功。
查询字符串是不是部分RewriteRule
模式
什么是匹配的?
- ...
- 如果你想对阵的主机名,端口或查询字符串,使用的RewriteCond与%{HTTP_HOST}%{SERVER_PORT}或{%} QUERY_STRING变量分别。
所以你的情况,你必须检查QUERY_STRING
并使用替代%1
,而不是$1
RewriteCond %{QUERY_STRING} user=u-(.*)
RewriteRule ^access/check$ /access/check?user=%1 [L]
要匹配“?” 这是一个查询字符串,你需要的RewriteCond,查询字符串不能单独一个重写规则相匹配。
根据定义查询字符串是一切后,“?”,你可以在一个重写规则的目的使用它们,但与它们匹配您将需要的RewriteCond正如我刚才提到的。
例:
RewriteCond %{QUERY_STRING} ^user=u-(.*)
RewriteRule ^access/check check?user=%1
从注的RewriteCond捕获基团被称为与%符号。
玩了一下简单的例子,并尝试了。
查询字符串是不是比赛的一部分,规则的模式,你需要来匹配%{QUERY_STRING}用的RewriteCond
RewriteEngine on
RewriteCond %{QUERY_STRING} ^user=u-([^&]+)&pass=([^&]+)$
RewriteRule ^access/check/?$ /access/check/?user=%1&pass=%2 [L]