Mod Rewrite Добавление параметров строки запроса, а не замена

Я пытаюсь создать внешнее перенаправление, которое включает несколько конкретных задач.

  1. Если в URL-адресе найдено конкретное значение строки запроса, выполните перенаправление.
  2. При перенаправлении замените одно из имен параметров строки запроса, но не его значение.
  3. Если № 1 ложно, игнорируйте перезапись и продолжайте

Пример: у меня есть URL http://foobar.com/?a=123&b=456&c=blah

Во-первых, если параметр c = blah, перенаправить на http://barfoo.com/

Во-вторых, замените параметр a на параметр x, чтобы конечный URL-адрес был http://barfoo.com/?x=123&b=456&c=blah

Ниже приведены мои наилучшие предположения после изучения http://mod-rewrite-cheatsheet.com/ и Скрытые функции mod_rewrite

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.foobar\.com$ [NC]
RewriteCond %{QUERY_STRING} ^a=(.*)&b=(.*)&c=blah$ [NC]
RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,QSA,R=301]

Однако URL-адрес добавляет строку запроса, а не заменяет ее.

Меня перенаправляют на http://barfoo.com/?x=123&b=456&c=blah&a=123&b=456&c=blah


person justacoder    schedule 10.12.2015    source источник


Ответы (1)


хлопает по лбу

Удаление QSA из флагов решило проблему. QSA означает «добавить существующую строку запроса к текущему правилу перезаписи». Он игнорирует любые новые параметры строки запроса, которые вы добавляете.

Я думал, что необходимо, чтобы параметры строки запроса существовали для самого правила перезаписи.

RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,R=301]

person justacoder    schedule 10.12.2015