2013-08-03 25 views
78

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.Làm thế nào để chuyển hướng url duy nhất trong nginx?

Về cơ bản 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

Có phải "isse" hoặc "issue"?! Câu trả lời giả định "vấn đề" ... –

+0

đó là vấn đề, sửa lỗi typo – tokmak

Trả lời

84

Đặt 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 lặp lại 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; 
} 
... 
113
location ~ /issue([0-9]+) { 
    return 301 http://example.com/shop/issues/custom_isse_name$1; 
} 
+0

@Cybolic Tôi vừa thử nghiệm hình ảnh trên docker với phiên bản '1.10.3' và 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? Có thể bạn đang thiếu thứ gì đó. –

28

Nếu bạn cần phải lặp lại nhiều hơn một vài chuyển hướng, bạn có thể xem xét sử dụng một bản đồ:

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 trong một tập tin bao gồm là một cách tuyệt vời để thay thế tập tin htaccess của tôi đầy RewriteRules từ apache. –

+2

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

+0

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

Các vấn đề liên quan