Перенаправить сайт с помощью .htaccess, если URL содержит определенный параметр - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь перенаправить свой сайт с помощью .htaccess, если URL содержит определенный параметр.

Например, когда мой сайт содержит ?lang=de, я бы хотел, чтобы сайт был перенаправлен на постоянное перенаправление https://www.example.com/de/

Это то, что я пробовал:

# BEGIN Redirects for mobile params
RewriteEngine On
RewriteCond %{REQUEST_URI} lang=de
RewriteRule .* https://www.example.com/de/
# END Redirects for mobile params

Любая помощь будет признательна, спасибо

ОБНОВЛЕНИЕ: Это то, что я пытаюсь сейчас, но я получаю:

# BEGIN Redirects for mobile params
RewriteEngine on
# if the query string contains a parameter called "lang"
RewriteCond %{QUERY_STRING} (?:^|&)lang=de
# then redirect (permanently) to /
RewriteRule ^ https://www.example.com/de/ [L,R=permanent]
# END Redirects for mobile params

Но это приводит к ERR_TOO_MANY_REDIRECTS

ОБНОВЛЕНИЕ: Я обнаружил, что когда он помещает это в конец моего .htaccess, он начинает работать.

1 Ответ

0 голосов
/ 24 января 2020

Я обнаружил, что когда он помещает это в конец моего .htaccess, он начинает работать.

Это может быть связано с более ранними директивами, которые предотвращают перенаправление l oop (другими словами, есть конфликт). В идеале это перенаправление должно быть в начале файла .htaccess.

Однако вы все равно должны отбросить строку запроса из перенаправленного ответа. В настоящее время ваше перенаправление на /de/ будет по-прежнему содержать lang=de параметр URL. Флаг QSD на Apache 2.4 сделает это. Например:

RewriteCond %{QUERY_STRING} (?:^|&)lang=(de)
RewriteRule !de/ /%1/ [QSD,R=permanent,L]

Обратная ссылка %1 содержит "de", записанную в строке запроса.

...