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


Ngix conf dosyamda düzgün bir şekilde çalışan bir rewrite var, ancak $ uri değişkeninin bir parçası olarak konum bloğunu içerecek gibi görünüyor. Sadece konum bloğundan sonra yolu istiyorum. Mevcut yapılandırma kodum:

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

Örnek URL kullanma http://localhost/cargo/testpage Yönlendirme çalışır, ancak php dosyamdan alınan "_REWRITE_COMMAND" parametresinin değeri "/ cargo / testpage" dir. Yer bloğunu kesmem ve $ uri olarak "testpage" yazmam gerekiyor

Ben $ uri ve $ 1 $ 2 vb kullanarak yeni bir değişkene atamak için bir regex sözdizimi olduğundan eminim, ancak bir yeniden yazma parçası olmayan bir regex kullanarak sadece bir değişken ataması yapmak için herhangi bir örnek bulamıyorum Beyan. Saatlerce bakmaya çalışıyorum ve bu son adımı geçemiyorum.

Ayrıca uygulama kodunda bunu çözebileceğimi de biliyorum, ancak nginx conf'de düzeltmek istediğim nedeni Apache üzerinde de çalıştığı için uyumluluk nedenleri. Bunu yapmak için gerçekten hacky bir yol bulmuş olduğumu da söylemeliyim, ancak dosya varlığını kontrol etmek için bir “if” ifadesi içeriyor ve özellikle yazıyor. değil böyle yapmak için.


12
2017-12-06 18:47


Menşei




Cevaplar:


Etrafa baktığımda, yakalanan regexp konumunun kullanılması en kolay olanıdır. Örneğinizi uyarladığım sonuç:

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

13
2017-12-06 21:53



aha, birileri size bir kez gösterdiğinde çok basit! Kök url'yi doğru yere yeniden yazmak için bazı küçük düzeltmeler yapmak zorunda kaldım. Bu yorumda herhangi bir format yapamadığım için cevabı soruya koyuyorum. Tek ikaz sola, php bloğunun şu anda bu konum bloğunun üzerinde olması veya sonsuz bir yeniden yönlendirme döngüsünün oluşturulması gerektiğinden kaynaklanır (çünkü / regex'den gelen bir kargo ve yönlendirme URL'si de / kargo içerir). Bunun olmasını önlemek için başka bir yol olup olmadığından emin değil misiniz? - Jason
Regexp ve regexp olmayan konumların siparişini okumanızı tavsiye ederim. Genelde, tüm konumların bir noktada regexp yapmasını sağlarım, çünkü sipariş, eşleşmenin özgüllüğü yerine, yapılandırma dosyasındaki sıraya göre belirlenir. - Theuni
cool teşekkürler, ben regex daha iyi olurdu ne olacağını hayal ediyordum eğer o eşleşen / kargo / (index.php dışında bir şey) o zaman sonsuz yeniden yazma döngüsü nedeniyle sunucu hatası engeller. - Jason


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

Uzaklaşabilmelisin

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

2
2018-04-10 19:09