Возможно перенаправление с условным принятием языка в директиве ?

#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>
  

В чем причина такого поведения?

Я прочитал документацию, но не смог найти никакой информации о моем сценарии.