.htaccess не экранирует вопросительный знак на RewriteRule - PullRequest
0 голосов
/ 15 мая 2018

У меня есть сайт со старым типом единого входа. Родительский веб-сайт отправляет пользователей на мой веб-сайт с таким URL-адресом, как:

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 голосов
/ 15 мая 2018

Вы не можете сравнивать с URL QueryString в шаблоне директивы RewriteRule. Вы можете сравнивать только с URL-адресом (то есть: index.php) в RewriteRule. Часть URL после знака ? - это URL QueryString. вам нужно будет сопоставить переменную %{QUERY_STRING} в RewriteCond.

RewriteEngine on

RewriteCond %{QUERY_STRING} ^gid=([^&]+)&u=([^&]+)&id=([^&]+)$ [NC]
RewriteRule ^index.php$  /login/%1/%2/%3? [L,R]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...