Tôi đang cố triển khai chuyển đổi ngôn ngữ bằng .htaccess và điều duy nhất còn lại là xử lý các ứng dụng không hỗ trợ cookie. Để làm điều đó, tôi phải đặt prefer-language
khi người dùng nhấp vào liên kết có thông số language
.Cách sử dụng SetEnv với thông số 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
Sự cố với dòng cuối cùng - Giá trị luôn được đặt thành trống. Nó hoạt động nếu tôi hardcode nó, nhưng không phải nếu tôi cố gắng tham khảo một biến. Có một số cú pháp đặc biệt để chỉ các biến môi trường trong ngữ cảnh này hay không, hoặc có cách nào khác để đặt prefer-language
không?
Chỉnh sửa: Cross-posted to Apache users list.
Tôi đã thử và không hoạt động (ít nhất với điều này): RewriteRule^(. *) $ 1 đô la? [cookie = language:% 1: .example.com: 7200: /, env = ngôn ngữ ưa thích:% 1, chuyển hướng = vĩnh viễn] Tôi có hiểu nhầm điều gì đó không? – l0b0
Bạn không thể đặt biến môi trường và thực hiện chuyển hướng cùng một lúc. Vì vậy, bạn cần phải kiểm tra cookie: 'RewriteCond% {HTTP_COOKIE} (?:^| [, \]) Language = (vi | fr | không) RewriteRule^- [E = ngôn ngữ ưa thích:% 1]' – Gumbo
I 'không chắc chắn cách tương tác với khách hàng được thực hiện, nhưng những điều sau không hoạt động khi cookie bị vô hiệu hóa trên máy khách, đó là những gì tôi đang cố sửa: RewriteEngine On RewriteBase/ RewriteCond% {QUERY_STRING} (?:^| &) language = (vi | fr | no) RewriteRule^(. *) $ 1 đô la? [cookie = language:% 1: .example.com: 7200: /, redirect = permanent] RewriteCond% {HTTP_COOKIE} (?:^| [, \]) language = (. *) RewriteRule^- [E = thích-ngôn ngữ:% 1] – l0b0