.htaccess不会逃避RewriteRule上的问号

时间:2018-05-15 01:32:36

标签: apache .htaccess nginx mod-rewrite

我的网站上有旧版的单点登录。父网站使用以下网址将用户发送到我的网站:

http://test.instela.fm/index.php?gid=abcd1234&u=thedewil&id=11472

我希望将其重写为:

http://test.instela.fm/login/abcd1234/thedewil/11472

我创建了一个 .htaccess 文件,如下所示:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^index.php?gid=(.*)&u=(.*)&id=(.*)$ login/$1/$2/$3 [L]

我尝试将URL中的问号转义为:

RewriteRule ^index.php\?gid=(.*)&u=(.*)&id=(.*)$ login/$1/$2/$3 [L]

但是,遗憾的是这些规则都不匹配并重写URL,我无法理解为什么。

1 个答案:

答案 0 :(得分:2)

您无法在RewriteRule指令的模式中与url QueryString匹配。您只能在RewriteRule中匹配url路径(即:index.php)。 ?符号后面的URL部分是URL QueryString。您需要与%{QUERY_STRING}中的RewriteCond变量匹配。

RewriteEngine on

RewriteCond %{QUERY_STRING} ^gid=([^&]+)&u=([^&]+)&id=([^&]+)$ [NC]
RewriteRule ^index.php$  /login/%1/%2/%3? [L,R]