Làm cách nào để chuyển hướng một url trong nginx?


111

Tôi đang trong quá trình sắp xếp lại cấu trúc url. Tôi cần thiết lập quy tắc chuyển hướng cho các url cụ thể - Tôi đang sử dụng NGINX.

Về cơ bản Một cái gì đó như thế này:

http://example.com/issue1 --> http://example.com/shop/issues/custom_issue_name1
http://example.com/issue2 --> http://example.com/shop/issues/custom_issue_name2
http://example.com/issue3 --> http://example.com/shop/issues/custom_issue_name3

Cảm ơn!


3
Đó là "isse" hay "issue" ?! Câu trả lời giả định "vấn đề" ...
Matthew Wilcoxson

đó là Sự cố, đã sửa lỗi đánh máy
tokmak 22/10/15

Câu trả lời:


122

Đặt điều này trong chỉ thị máy chủ của bạn:

location /issue {
   rewrite ^/issue(.*) http://$server_name/shop/issues/custom_issue_name$1 permanent;
 }

Hoặc sao chép nó:

location /issue1 {
   rewrite ^/.* http://$server_name/shop/issues/custom_issue_name1 permanent;
}
location /issue2 {
   rewrite ^.* http://$server_name/shop/issues/custom_issue_name2 permanent;
}
 ...

139
location ~ /issue([0-9]+) {
    return 301 http://example.com/shop/issues/custom_isse_name$1;
}

@Cybolic Tôi vừa thử nghiệm điều này trên hình ảnh docker với phiên bản 1.10.3và nó ổn, bạn có thể cung cấp tệp cấu hình của mình bằng cách nào đó không? Bạn có thể đang thiếu một cái gì đó.
Mohammad AbuShady

34

Nếu bạn cần sao chép nhiều hơn một vài chuyển hướng, bạn có thể cân nhắc sử dụng bản đồ:

# map is outside of server block
map $uri $redirect_uri {
    ~^/issue1/?$    http://example.com/shop/issues/custom_isse_name1;
    ~^/issue2/?$    http://example.com/shop/issues/custom_isse_name2;
    ~^/issue3/?$    http://example.com/shop/issues/custom_isse_name3;
    # ... or put these in an included file
}

location / {
    try_files $uri $uri/ @redirect-map;
}

location @redirect-map {
    if ($redirect_uri) {  # redirect if the variable is defined
        return 301 $redirect_uri;
    }
}

4
Đây là những gì tôi đến đây để tìm kiếm - đặt chúng vào một tệp được bao gồm là một cách tuyệt vời để thay thế tệp .htaccess của tôi chứa đầy RewriteRules từ apache.
Josh từ Qaribou

3
bạn sẽ kết hợp cách tiếp cận bản đồ này với vị trí hiện có / ... thiết lập loại proxy_pass như thế nào?
Michael Dausmann

@redirect-mapvị trí bạn có thể thử, if ($redirect_uri = "") {return 404;}theo sau là công cụ proxy_pass. Có thể cần viết lại bằng cách sử dụng $redirect_uri.
Cole Tierney

Điều này có thể cần thiết thay vì 2 locationkhối tùy thuộc vào thiết lập của bạn. Đây là ví dụ cho Craft CMS. location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
luwes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.