#apache #.htaccess #url-redirection #apache2.4
#apache #.htaccess #перенаправление #apache2.4
Вопрос:
Чего я хочу достичь?
Я хочу перенаправить на, /de/
если вызывается домашняя страница ( /
) и HTTP-заголовок Accept-Language
начинается с de
браузера посетителя, но только для определенных доменов.
Вот моя отправная точка:
Поскольку у меня много правил перенаправления для конкретного домена, у меня есть несколько <If>
директив. Следующий фрагмент кода сокращен до минимума.
<IfModule mod_rewrite.c>
RewriteEngine on
# Redirect serveral domain aliases
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^(www.)?my-domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^(www.)?anotherdomain.com$
RewriteRule .* https://www.mywebsite.com/en/products/overview/ [R=301,L]
RewriteCond %{HTTP_HOST} ^(karriere|jobs).areal-domain.at$
RewriteRule .* https://www.mywebsite.com/de/ueber-uns/karriere/ [R=301,L]
# Redirect language DE for homepage only of www.mywebsite.com
# (the following rule is outside of the following otherwise it will not work actually
RewriteCond %{REQUEST_URI} ^/?$
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de/ [R=301,QSA,L]
<If "req('Host') =~ /(live.mywebsite.com|www.mywebsite.com|mywebsite.com|mywebsite.docker)/">
RedirectMatch 301 ^/$ /en/
RedirectMatch 301 ^/contact(/)?$ /en/about-us/contact/
RedirectMatch 301 ^/customer-support(/)?$ /en/service-and-support/
</If>
</IfModule>
Это моя проблема:
Сервер apache версии v2.4.38 всегда отправляет код состояния HTTP 500, если я помещаю перезапись для перенаправления языка в <If>
директиву, как показано в следующем фрагменте:
<IfModule mod_rewrite.c>
RewriteEngine on
# ...
<If "req('Host') =~ /(live.mywebsite.com|www.mywebsite.com|mywebsite.com|mywebsite.docker)/">
# Redirect language DE for homepage only of www.mywebsite.com
RewriteCond %{REQUEST_URI} ^/?$
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de/ [R=301,QSA,L]
RedirectMatch 301 ^/$ /en/
RedirectMatch 301 ^/contact(/)?$ /en/about-us/contact/
RedirectMatch 301 ^/customer-support(/)?$ /en/service-and-support/
</If>
</IfModule>
В чем причина такого поведения?
Я прочитал документацию, но не смог найти никакой информации о моем сценарии.