Nginx'te tek bir url nasıl yönlendirilir?


111

URL yapısını yeniden düzenleme sürecindeyim. Belirli url'ler için yönlendirme kuralları oluşturmam gerekiyor - NGINX kullanıyorum.

Temelde bunun gibi bir şey:

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

Teşekkürler!


3
Bu "isse" mi yoksa "sorun" mu? Yanıtlar "sorun" olduğunu varsayar ...
— Matthew Wilcoxson

Sorun, yazım hatası düzeltildi
— tokmak

Yanıtlar:


122

Bunu sunucu yönergenize koyun:

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

Veya çoğaltı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 Bunu sürümüyle birlikte bir docker görüntüsünde test ettim 1.10.3ve iyiydi, yapılandırma dosyanızı bir şekilde sağlayabilir misiniz? Muhtemelen bir şeyi kaçırıyorsunuz.
— Mohammad AbuShady

34

Birkaç yeniden yönlendirmeden fazlasını çoğaltmanız gerekiyorsa, bir harita kullanmayı düşünebilirsiniz:

# 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
Buraya aradığım şey buydu - bunları dahil edilen bir dosyaya koymak, apache'den RewriteRules ile dolu .htaccess dosyamı değiştirmek için mükemmel bir yoldur.
— Qaribou'dan Josh

3
bu harita yaklaşımını mevcut bir konum / ... proxy_pass türü kurulumuyla nasıl birleştirirsiniz?
— Michael Dausmann

Gelen @redirect-mapkonum Eğer deneyin olabilir if ($redirect_uri = "") {return 404;}proxy_pass şeyler izledi. Kullanarak yeniden yazmaya ihtiyaç duyabilir $redirect_uri.
— Cole Tierney

locationKurulumunuza bağlı olarak 2 blok yerine bu gerekli olabilir . Bu, örneğin Craft CMS içindir. location ~ ^(.*)$ { if ($redirect_uri) { # redirect if the variable is defined return 301 $redirect_uri; } try_files $uri $uri/ /index.php?p=$uri&$args; }
— luwes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.