在URL重写阿帕奇字符串 - 障碍是查询“?”(Apache rewrite string in U

2019-09-30 14:16发布

要重写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 ,但仍然没有成功。

Answer 1:

查询字符串是不是部分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]


Answer 2:

要匹配“?” 这是一个查询字符串,你需要的RewriteCond,查询字符串不能单独一个重写规则相匹配。

根据定义查询字符串是一切后,“?”,你可以在一个重写规则的目的使用它们,但与它们匹配您将需要的RewriteCond正如我刚才提到的。

例:

RewriteCond %{QUERY_STRING} ^user=u-(.*)
RewriteRule ^access/check check?user=%1

从注的RewriteCond捕获基团被称为与%符号。

玩了一下简单的例子,并尝试了。



Answer 3:

查询字符串是不是比赛的一部分,规则的模式,你需要来匹配%{QUERY_STRING}用的RewriteCond

RewriteEngine on
RewriteCond %{QUERY_STRING} ^user=u-([^&]+)&pass=([^&]+)$
RewriteRule ^access/check/?$ /access/check/?user=%1&pass=%2 [L]


文章来源: Apache rewrite string in URL - obstacle is “?” in query