Возможно ли условное перенаправление языка принятия в директиве <If>? - PullRequest
1 голос
/ 06 марта 2019

Чего я хочу достичь?

Я хочу перенаправить на /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>

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

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

...