Điểm:1

Ngôn ngữ Nginx + Wordpress chuyển hướng sai với ngôn ngữ mặc định

lá cờ us

Ngôn ngữ Nginx + Wordpress chuyển hướng sai với ngôn ngữ mặc định

Xin lỗi vì trùng lặp câu hỏi này ở đây: Chuyển hướng ngôn ngữ Nginx + Wordpress

Tất cả đều hoạt động trừ ngôn ngữ EN mặc định.

Tôi chỉ muốn chuyển hướng khách truy cập JP đến thư mục /ja/, có thể nhiều quốc gia khác đến các thư mục khác sau này.

Hiện tại, tôi muốn tất cả các quốc gia khác về miền gốc.

Quy tắc tôi đã sử dụng là:

bản đồ $http_accept_language $lang {
    mặc định vi;
    ~ja ja;
}

...

viết lại ^/$ /$lang/ vĩnh viễn;

Quy tắc này đã chuyển hướng tất cả khách truy cập khác đến mydomain.com/en/, tất nhiên đó là 404 vì EN là ngôn ngữ chính của tôi!

=======================================

Đây là tất cả các quy tắc trong cấu hình bên trang web

Hy vọng bất cứ ai có thể giúp tôi với điều này!

bản đồ $http_accept_language $lang {
mặc định vi;
~ja ja;
}

người phục vụ 
{ 
nghe 80; 
nghe 443 ssl http2; 
server_name mydomain.com www.mydomain.com; 
chỉ mục index.php index.html index.htm default.php default.htm default.html; 
gốc /www/wwwroot/mydomain.com;

# VIẾT LẠI-BẮT ĐẦU

viết lại ^/$ /$lang/ vĩnh viễn;

bao gồm /www/server/panel/vhost/rewrite/mydomain.com.conf;
# VIẾT LẠI- KẾT THÚC


vị trí ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
    trả lại 404;
}


vị trí ~ \.nổi tiếng{
    chấp nhận tất cả;
}

vị trí ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    hết hạn 30d;
    error_log /dev/null;
    truy cập_log /dev/null;
}

vị trí ~ .*\.(js|css)?$
{
    hết hạn 12h;
    error_log /dev/null;
    truy cập_log /dev/null; 
}
truy cập_log /www/wwwlogs/mydomain.com.log;
error_log /www/wwwlogs/mydomain.com.log;
}
Richard Smith avatar
lá cờ jp
Bạn có `default en;` trong bản đồ của mình - bạn có nói rằng bạn không muốn mặc định chuyển hướng đến `/en/` không?
Matthew avatar
lá cờ us
vâng, @Richard Smithï¼ chỉ muốn chuyển hướng ngôn ngữ đã dịch sang thư mục của họ, tất cả những ngôn ngữ khác về gốc: mydomian.com
Matthew avatar
lá cờ us
Xin chào @Richard Smith ï¼ cảm ơn vì câu trả lời của bạn, nhưng xin lỗi vì tôi không biết cách viết mã, vì vậy bạn vui lòng giúp tôi với ` if ($lang) { ... }`
Matthew avatar
lá cờ us
Mình chỉ post file config toàn side wide của mình bên dưới, bạn check giúp mình nhé
Matthew avatar
lá cờ us
xin lỗi lỗi của tôi, vừa xóa câu trả lời và chỉnh sửa câu hỏi!
lá cờ sv
Chào mừng đến với ServerFault.Câu lệnh viết lại của bạn có thể được viết như sau `if ($lang != "en" ) { rewrite ^/$ /$lang/ Permanent; }` để đạt được hiệu quả mong muốn.
Điểm:0
lá cờ jp

Nếu bạn loại bỏ mặc định vi; dòng từ của bạn bản đồ, giá trị của $lang sẽ trở thành chuỗi rỗng được đánh giá là sai trong một nếu sự biểu lộ. Nhìn thấy tài liệu này để biết chi tiết.

Bạn có thể thay thế viết lại ^/$ ... tuyên bố với một vị trí = / chặn. Nhìn thấy tài liệu này để biết chi tiết.

Ví dụ:

bản đồ $http_accept_language $lang {
    ~ja ja;
}

người phục vụ {
    ...
    vị trí = / {
        nếu ($lang) {
            trả về 301 /$lang/$is_args$args;
        }
    }
    ...
}

Nhìn thấy tài liệu này về những tuyên bố nào được cho phép trong một nếu khối được lồng trong một địa điểm chặn.

Matthew avatar
lá cờ us
Điều đó hoạt động nhưng một vấn đề khác xuất hiện: đối với ngôn ngữ khác, nó được chuyển hướng thành mydomain.com// , cuối cùng có 2 "//"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.