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.