Bagaimana cara mengarahkan satu url di nginx?


111

Saya sedang dalam proses mengatur ulang struktur url. Saya perlu mengatur aturan pengalihan untuk url tertentu - Saya menggunakan NGINX.

Pada dasarnya Sesuatu seperti ini:

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

Terima kasih!


3
Apakah itu "isse" atau "issue" ?! Jawaban mengasumsikan "masalah" ...
— Matthew Wilcoxson

Jawaban:


122

Taruh ini di direktif server Anda:

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

Atau duplikat:

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 Saya baru saja menguji ini pada gambar buruh pelabuhan dengan versi 1.10.3dan itu baik-baik saja, dapatkah Anda memberikan file konfigurasi Anda entah bagaimana? Anda mungkin melewatkan sesuatu.
— Mohammad AbuShady

34

Jika Anda perlu menduplikasi lebih dari beberapa pengalihan, Anda dapat mempertimbangkan untuk menggunakan peta:

# 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
Inilah yang saya cari di sini - meletakkan ini dalam file yang disertakan adalah cara terbaik untuk mengganti file .htaccess saya yang penuh dengan RewriteRules dari apache.
— Josh dari Qaribou

3
bagaimana Anda akan menggabungkan pendekatan peta ini dengan pengaturan tipe lokasi / ... proxy_pass yang ada?
— Michael Dausmann

Di @redirect-maplokasi Anda dapat mencoba if ($redirect_uri = "") {return 404;}diikuti oleh hal-hal proxy_pass. Mungkin perlu menulis ulang menggunakan $redirect_uri.
— Cole Tierney

Ini mungkin diperlukan alih-alih 2 locationblok tergantung pada pengaturan Anda. Ini untuk Craft CMS misalnya. location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
— luwes
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.