Điểm:2

Chuyển hướng đến máy chủ và tên miền khác nếu không tìm thấy tệp

lá cờ sd

Tôi đã chuyển từ Apache sang Nginx nên tôi muốn đặt tất cả các quy tắc trong Nginx.

Ghi bàn: Chuyển hướng URL tới một miền khác có cùng tên tệp nếu không tìm thấy tệp đó trên máy chủ được yêu cầu.

Ví dụ

Nếu người dùng mở https://www.example.com/data/1.jpg sau đó máy chủ của tôi sẽ cố gắng tìm "1.jpg" trong thư mục "dữ liệu". Nếu không tìm thấy tệp đó thì hãy chuyển hướng người dùng đến URL máy chủ dự phòng như https://www.example2.com/backup/1.jpg

Ví dụ trong .htaccess

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) - [L]
RewriteRule (.*) https://example2.com/backup/$1 [L]

Những gì tôi đã thử

  1. Tìm kiếm các giải pháp hiện có nhưng tôi không tìm thấy bất kỳ giải pháp hiệu quả nào.
  2. Cố gắng chuyển đổi cấu hình apache sang cấu hình Nginx thông qua trình chuyển đổi nhưng không hoạt động.

Một số đã thử cấu hình nhưng không hoạt động.

    vị trí ~ /data/.* {
        nếu (-e $request_filename){
            viết lại ^ https://www.example2.com/backup/$1 lần cuối;
        } 
    }


    vị trí ~ /data/.* {
        nếu (-e $request_filename){
            viết lại ^ https://www.example2.com/backup/$1 vĩnh viễn;
        } 
    }


    vị trí ~ /data/.* {
        try_files $uri https://www.example2.com/backup/$uri;
    }
lá cờ kz
Trong ví dụ của bạn, bạn đang chuyển hướng từ `example.com/data/1.jpg` sang `example2.com/backup/1.jpg` - đó có phải là cố ý không? Hay nó phải là `example2.com/backup/data/1.jpg` (đó là giả định về mã và câu trả lời hiện tại của bạn)?
Shubham Panchal avatar
lá cờ sd
Vâng, example2.com/backup/1.jpg là cố ý.
Điểm:1
lá cờ sd

Tôi đã nhận được giải pháp sau khi sửa đổi câu trả lời @Rob.

đặt $v_filename nf;

vị trí ~ ^/data/(.*)$ {
    try_files $uri @externalbackup;
    đặt $v_filename $1;
}

vị trí @externalbackup {
     trả lại 301 https://www.example2.com/backup/$v_filename ;
}
Điểm:1
lá cờ us
Rob

Trong nginx, bạn sẽ sử dụng một try_files chỉ thị, phục vụ nội dung từ tệp cục bộ, nếu nó tồn tại trong một (hoặc nhiều) thư mục cục bộ. Khi không tìm thấy tệp nào, một chuyển hướng nội bộ đến uri được chỉ định trong tham số cuối cùng sẽ được thực hiện.

Vì điều đó không thể chuyển hướng ra bên ngoài nên bạn cần một chút mánh khóe và cách tiếp cận hai tầng. Trong các tùy chọn try_files, bạn sử dụng vị trí được đặt tên cho chuyển hướng nội bộ đó và từ vị trí được đặt tên đó, bạn tạo chuyển hướng bên ngoài.

địa điểm / {
    try_files $uri @externalbackup;
}

vị trí @externalbackup {
     trả lại 301 https://www.example2.com/backup$request_uri;
}

Đoạn mã trên chưa được kiểm tra.

lá cờ kz
Tôi nghĩ loại chuyển hướng này phải là 302 (tạm thời) nếu có ý định rằng tệp được yêu cầu ban đầu có thể tồn tại trong tương lai.
Shubham Panchal avatar
lá cờ sd
Cảm ơn bạn @Rob vì câu trả lời của bạn. Tôi đã thử điều này và chuyển hướng đang hoạt động nhưng tên tệp không hoạt động trong URL được chuyển hướng. Nó giống như: https://www.example2.com/backup Nhưng nó nên: https://www.example2.com/backup/file_name_here

Đă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.