.htaccess RewriteRule Условие перезаписи со строкой запроса, но без добавления строки запроса к окончательному URL-адресу - PullRequest
2 голосов
/ 19 июня 2020

Я хотел бы иметь следующее правило перезаписи:

  1. Строка запроса должна начинаться с choice1 или choice2
  2. строка запроса содержит только одно другое значение
  3. Домен должен быть путем конечного URL-адреса
  4. Конечный URL-адрес не должен содержать строку запроса.
  5. Конечный URL-адрес должен содержать два значения строки запроса на своем пути

У меня пока есть это (с помощью отсюда):

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(choice1|choice2)&([^&.]+) [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^\.]+)\..+$ [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3 [L,NE,R=302]

Условия работают нормально. Но конечный URL-адрес не содержит значений строки запроса (% 1 и% 2). Также добавляется строка запроса, хотя я не использую QSA-Flag.

Некоторые примеры:

first-domain.de?choice1&abc => https://www.mysite.de/link/choice1/abc/first-domain
first-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/first-domain
second-domain.de?choice1&ttt => https://www.mysite.de/link/choice1/ttt/second-domain
second-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/second-domain

1 Ответ

2 голосов
/ 19 июня 2020

Вы можете использовать это правило:

RewriteEngine On

RewriteCond %{QUERY_STRING}#%{HTTP_HOST} ^(choice1|choice2)&([^&#]+)#(?:www\.)?([^.]+)\. [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3? [L,NE,R=302]

Причина использования %{QUERY_STRING}#%{HTTP_HOST} в одном условии заключается в том, что мы можем использовать только самые последние RewriteCond для захвата значений %1, %2, %3 и c.

...