Перенаправление .htaccess на основе языка браузера и параметра utm

#.htaccess

#.htaccess

Вопрос:

Я ищу способ .htaccess перенаправить посещения, поступающие из GMB, если совпадают два условия:

  • URL-адрес содержит параметр ?utm_source=gmb

    Пример:

    https://example.com/?utm_source=gmbamp;utm_medium=organicamp;utm_content=listingamp;utm_campaign=1

  • язык браузера — португальский ( pt , pt-pt или pt-br )

Затем для перенаправления на страницу на португальском языке необходимо только добавить amp;lang=pt-pt в конце URL-адреса, поскольку сайт использует WPML с language в качестве параметра.

Все остальные запросы, без ?utm_source=gmb , я предпочитаю не перенаправлять, чтобы избежать проблем с индексацией в поисковой выдаче.

Ответ №1:

Вы можете сделать что-то вроде следующего при .htaccess использовании mod_rewrite, однако обратите внимание на следующие предостережения:

 RewriteEngine On

# Check for "utm_source=gmb" anywhere in the query string
RewriteCond %{QUERY_STRING} (?:^|amp;)utm_source=gmb(?:$|amp;)
RewriteCond %{HTTP:Accept-Language} ^pt(|-pt|-br)
RewriteRule (.*) /$1?lang=pt-pt [QSA,R,L]
  

добавить amp;lang=pt-pt в конце URL-адреса

Обратите внимание, что это добавляется lang=pt-pt в начале строки запроса, а оставшаяся строка запроса добавляется ( QSA флаг). Порядок не должен иметь значения, но его можно добавить в конце, если вы действительно этого требуете (хотя это не «естественный способ» сделать это).

Однако это имеет ряд предостережений относительно определения языка:

  • Здесь невозможно «точно» определить язык.
  • Это предполагает, что «основной» язык определяется первым в заголовке Accept-Language HTTP. Хотя это обычное дело, это не гарантировано.
  • Это не говорит вам, какой язык на самом деле использует пользователь, просто это pt принятый язык браузером. Нет никакого способа определить «фактический» язык, используемый здесь.
  • Следовательно, «перенаправление» пользователя на основе (базового) определения языка, как правило, является плохой идеей.