Próbuję zaimplementować przełączanie języków w pliku .htaccess, a jedyne, co pozostało, to obsłużyć klientów, którzy nie obsługują plików cookie. Aby to zrobić, muszę ustawić prefer-language
, gdy użytkownik kliknie łącze z parametrem language
.Jak używać SetEnv z parametrem adresu URL
RewriteEngine On
RewriteBase/
RewriteCond %{QUERY_STRING} (?:^|&)language=(en|fr|no)
RewriteRule ^(.*)$ $1? [cookie=language:%1:.example.com,env=language:%1,R]
SetEnv prefer-language $language
Problem dotyczy ostatniej linii - wartość jest zawsze pusta. Działa, jeśli ją zakodowuję, ale nie, jeśli spróbuję odnieść się do zmiennej. Czy istnieje jakaś specjalna składnia odnosząca się do zmiennych środowiskowych w tym kontekście, czy jest jakiś inny sposób ustawienia prefer-language
?
Edytuj: Przekazano do Apache users list.
Próbowałem go, i to nie działa (przynajmniej z tego): RewriteRule^(. *) $ 1? [cookie = język:% 1: .example.com: 7200: /, env = prefer-language:% 1, redirect = permanent] Czy coś nie rozumiem? – l0b0
Nie można ustawić zmiennej środowiskowej i wykonać przekierowania w tym samym czasie. Więc raczej musisz przetestować ciasteczko: 'RewriteCond% {HTTP_COOKIE} (?:^| [, \]) Language = (en | fr | no) RewriteRule^- [E = prefer-language:% 1]' – Gumbo
I "Nie jestem pewien, w jaki sposób odbywa się interakcja z klientem, ale następujące czynności nie działają, gdy pliki cookie są wyłączone na kliencie, co staram się naprawić: RewriteEngine On RewriteBase/ RewriteCond% {QUERY_STRING} (?:^| &) language = (en | fr | no) RewriteRule^(. *) $ 1? [cookie = język:% 1: .example.com: 7200: /, przekierowanie = stały] RewriteCond% {HTTP_COOKIE} (?:^| [, \]) language = (. *) RewriteRule^- [E = prefer-language:% 1] – l0b0