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.