nginx yapılandırmasında $ uri'den konum bloğu nasıl kaldırılır?


16

$ Uri değişkeninin bir parçası olarak konum bloğu dahil gibi görünüyor düzgün çalışan benim ngix conf dosyasında bir yeniden yazma var. Sadece konum bloğundan sonra yolu istiyorum. Geçerli yapılandırma kodum:

location /cargo {
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

http://localhost/cargo/testpageYönlendirmenin örnek bir url'sinin kullanılması , ancak php dosyam tarafından alınan "_REWRITE_COMMAND" parametresinin değeri "/ cargo / testpage" dir. Ben konum bloğunu çıkarmak ve sadece $ uri olarak "test sayfası" var

$ Uri bölmek ve $ 1 $ 2 vb kullanarak yeni bir değişkene atamak için bir regex sözdizimi olduğundan eminim, ama bir yeniden yazma parçası olmayan bir regex kullanarak sadece değişken atama yapmak için herhangi bir örnek bulamıyorum Beyan. Saatlerdir bakıyorum ve deniyorum ve bu son adımı atlayamıyorum.

Ben de sadece uygulama kodu bu dışarı şerit biliyorum, ama ben nginx conf düzeltmek için denemek istiyorum nedeni de Apache üzerinde çalışır gibi uyumluluk nedenlerinden dolayı. Ben de bunu yapmak için gerçekten hacky bir yol bulduk söylemek gerekir, ama dosya varlığını kontrol etmek için bir "if" deyimi içerir ve belgeler özellikle bu şekilde yapmak değil diyor .

Yanıtlar:


18

Etrafa baktığımda, yakalamalarla normal ifade konumu kullanmanın en kolay yol olduğunu tahmin ediyorum. Örneğinize uyum sağladım:

location ~ ^/cargo(.*) {
    try_files $1 $1/ /cargo/index.php?_REWRITE_COMMAND=$1&args;
}

aha, biri size işaret ettiğinde çok basit! Kök url yeniden yazımını doğru konuma getirmek için bazı küçük düzeltmeler yapmak zorunda kaldım. Bu yorumda herhangi bir biçimlendirme yapamadığım için soruya cevap verdim. Kalan tek uyarı php bloğunun şimdi bu konum bloğunun üzerinde olması veya sonsuz bir yönlendirme döngüsünün oluşturulması gerektiğidir (/ cargo bir regex olduğundan ve yönlendirme url'si de / cargo içerdiğinden). bunun olmasını önlemenin başka bir yolu olup olmadığından emin değil misiniz?
Jason

Regexp ve regexp olmayan yerlerin sırasını okumanızı tavsiye ederim. Ben genellikle sipariş bir noktada regexp yapmak için dönün çünkü daha sonra sipariş yapılandırma dosyasındaki eşleşmenin özgünlüğü yerine sipariş tarafından belirlenir.
Theuni

çok teşekkürler, ben daha iyi regex yapacak ne hayal / kargo / (index.php dışında bir şey) o zaman sonsuz rewrite döngü nedeniyle sunucu hatası önleyeceğini olacağını hayal ediyordum.
Jason

3

Benim için işe yarayan başka bir şey buldum (gunicorn kullandığım için, neyi geçeceğimi seçemiyorum)

İle kaçabilmelisin

location /cargo {
    rewrite ^/cargo(.*)$ $1 break;
    try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args;
}

1

Node JS ile mikro hizmet veya API eklemek için uğraşanlar için apisunucumdaki url'den kaldırmak için aşağıdakileri kullandım :

location ^~ /api {
        rewrite ^/api(/.*)$ $1 break;
        proxy_pass    http://127.0.0.1:3001/;
    }
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.