Apache2 - 301 Url'deki dizinin sonunda “/” eksik olduğunda yönlendirme


13

Sonunda eğik çizgi ("/") olmadan böyle bir url isterken bu Yönlendirmeyi (301) gerçekten fark etmedim: http://server/directory

Sunucu, Konum başlığının bulunduğu bir 301 Yönlendirme Kalıcı başlığına sahip olacaktır http://server/directory/.

Bu canlı örneğe bakın:

Kullanıcı isteği:

GET /social HTTP/1.1
( http://192.168.1.111/social )

Apache Sunucu Yanıtı:

HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/

Kullanıcı isteği:

GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )

Apache Sunucu Yanıtı:

HTTP/1.1 200 OK

Apache access.log:

192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"

/ Social / dizini bir index.htmldosya içerir .

Apache Yazılımı: Apache/2.2.22 (Ubuntu)
Dizin Seçenekleri:Options Indexes FollowSymLinks MultiViews

Benim sorum şu: Apache bunu neden yapıyor? Ve yönlendirmeyi nasıl önleyebilir ve index.htmldoğrudan gönderebilirim ? Müşteriler gerçekten gereksiz iki istek göndermelidir. Ve belki bazı istemciler Yönlendirmelere izin vermez ve eğik çizgi ("/") olmadan siteye gidemez.

Yönlendirmeyi devre dışı bırakmak istemiyorum. Ben herhangi bir yönlendirme olmadan doğrudan yanıt göndermek için sunucu istemiyorum. İstekte bile /social.

Apache bu istekleri yönlendirecek şekilde mi tasarlandı? Sunucu verileri yönlendirmeden gönderebilir, değil mi? Bunu mod_rewriteönlemek için? Veya başka bir yapılandırma? Yoksa sadece bu şekilde olmasına izin vermeli ve tüm html bağlantılarının sonuna eğik çizgi eklemeli ve bazı yönlendirmelerle mi yaşamalıyım?

Siz ne düşünüyorsunuz?


Sanırım bunu neden devre dışı bırakmak istediğinizi açıklığa kavuşturmanız gerekecek. Yönlendirmeye tek aklı başında alternatif /social, örneğiniz için 404 ile yanıt vermek olacaktır .
Håkan Lindqvist

Devre dışı bırakmak istemiyorum, sadece yönlendirmeyi önleyin. Ben sunucu index.htmlyönlendirme olmadan çıktı istiyorum
Jonathan Gurebo

"This" ile yanlış url'den doğru url'e bir yönlendirme ile normal davranıştan bahsediyordum. İçeriği sunmanın kötü bir fikir olmasının bazı nedenleri için @kasperd'den gelen cevaba bakınız /social. (Ayrıca, genel olarak, aynı içeriğin birden fazla url'de sunulması genellikle istenmez.)
Håkan Lindqvist

Yanıtlar:


10

Verileri yönlendirme olmadan göndermek göreli bağlantıları keser. Eğer http://server/directoryiçeriyorsa file, bunun için tam URL olur http://server/directory/file. Gibi belirtilen bir bağlantı <a href="file">işaret edecek http://server/directory/filetemel URL ise http://server/directory/, ancak temel URL ise sadece http://server/directoryo işaret olurdu http://server/fileamaçlanan sonucu değil, bunun yerine.

Apache, yönlendirme yerine URL'ye bağlı olarak dizin listesini iki farklı şekilde oluşturmuş olabilir. Ancak index.htmldizinde bir dosya varsa bu işe yaramaz . Bunun yerine Apache her iki durumda da çalışan yaklaşımı kullanıyor.

Bu yeni bir davranış değil, on yıl önce Apache aynı şekilde davranıyordu. Yeniden yönlendirmeyi gerçekleştiremeyen istemciler şimdiye kadar düzeltilmiş olmalıdır. Ancak, yeniden yönlendirmeyi işleyemeyen istemciler için Apache, bunun yerine takip edilebilecek bir bağlantı içeren küçük bir html dosyası boyunca gönderiyor olmalıdır.


Bu soruya cevap vermiyor. Göreceli bağlantıların bozulabileceği doğrudur. Ancak bir kişi, bir eğik çizgi olmadan bir yol için içerik iletmek istiyorsa, bunun için örneğin bir web hizmetine bir POST isteği gönderildiğinde bunun için rezonanslar olabilir. Web hizmetlerinde göreceli bağlantı yoktur ve yönlendirme POST gövdesinin kaybolmasına neden olur.
dr fu manchu

9

mod_dirbu yönlendirmeyi ekler ve bir DirectorySlash Offyönerge ile devre dışı bırakabilirsiniz .

Ancak, sondaki eğik çizgi yönlendirmesini devre dışı bırakmanın bazı sayfaların kırılmasına neden olabileceğini unutmayın. Döndürülen sayfa göreli bağlantılar içeriyorsa, sayfa arka eğik çizgi olmadan sunulursa bu URL'ler farklı şekilde çözümlenir.

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.