2016-03-23 12 views
0

Birisi bana bu .htaccess kurallarının ne anlama geldiğini açıklayabilir mi?Açıklayan .htaccess dosyası

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

cevap

1

en Adım adım yapalım:

Options -MultiViews 

From Apache documentation:

A MultiViews arama

MultiViews Options olarak etkindir. Sunucu, /some/dir/foo için bir istek alırsa ve /some/dir/foo mevcut değilse, sunucu, foo.* adlı tüm dosyaları arayan dizini okur ve tüm bu dosyaları adlandıran bir tür eşlemini, aynı medya türlerini ve içerik kodlamalarını atayarak etkili bir şekilde yükler. Eğer müşteri bunlardan birine isim vermiş olsaydı olurdu. Daha sonra, müşterinin gereksinimlerine en uygun olanı seçer ve bu belgeyi döndürür.

RewriteEngine On 

From Apache documentation

: yönergesi etkinleştirir veya çalışma zamanı yeniden yazma motoru devre dışı bırakır

YenidenYazmaMotoru. Bu modül kapalı olarak ayarlanmışsa, hiç çalışma zamanı işlemi yapılmaz. SCRIPT_URx ortam değişkenlerini güncellemez.

Tüm RewriteRule yönergelerini açıklamak yerine, belirli bir bağlamdaki kuralları devre dışı bırakmak için bu yönergeyi kullanın.

Yeniden yapılandırma yapılandırmalarının sanal konaklar tarafından devralınmayacağını unutmayın. Bu, yeniden yazma kurallarını kullanmak istediğiniz her sanal konak için bir RewriteEngine yönergesi almanız gerektiği anlamına gelir.


RewriteRule ^(.*)/$ /$1 [L,R=301] 

Bu kural

örneğin http://www.example.com/test/ için, bir eğik çizgiyle herhangi bir isteği yakalayacak.

Bu istekte yalnızca test bölümü yakalanacak, çünkü / izlemesi () yakalama parantezlerinin dışında. Daha sonra kullanıcıyı http://www.example.com/ + yakalama dizgisi test: http://www.example.com/test'a yönlendirecektir. [L] bayrağı, başka hiçbir kuralın kontrol edilmeyeceği anlamına gelir. [R=301] bayrağı, kullanıcının bu sayfaya bir 301 kodu ile yönlendirileceği anlamına gelir. Bu kuralın amacı, takip eden eğik çizgileri kaldırmaktır.


RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L] 

Bu bölüm

tipik olarak bir Dağıtıcı olarak adlandırılır. Bir dosyaya (%{REQUEST_FILENAME} !-f) veya bir dizine (%{REQUEST_FILENAME} !-d) işaret eden herhangi bir istek index.php'a gönderilecektir.

bu kuralın amacı http://www.example.com/user/1/florian bu isteği yerine mümkün olacak kim index.php için (dosya sistemi üzerinde florian adlı bir dosya ile hiçbir klasör user/1/ yoktur) gibi yeniden yazılmış sorgular yönlendirmektir.

+0

Detaylı açıklamanız için teşekkürlerFlorian. Çok yardımcı oldu. Yine de bir sorum var. Bir url geçerli değilse, index.php'ye (RewriteRule^index.php'ye göre) yönlendirilir. Ancak bu durumda bile $ _SERVER [REQUEST_URI], /index.php komutunu çalıştırdığım orijinal uri'dir. Neden ? – Rishi

+0

Mantıksal bir yeniden yazma değil, yeniden yönlendirme. Dokümandan: '' REQUEST_URI ': Bu sayfaya erişmek için verilen URI; örneğin, '/ index.html'. Yeniden yazılan yolu elde etmek için: '' PATH_TRANSLATED ': Dosya sistemi - (geçerli belgeye değil, belgenin kök) temelli yolu, sunucu sanal-gerçek eşlemeyi tamamladıktan sonra.' [İşte doc] (http: //php.net/manual/en/reserved.variables.server.php) –

+0

@rishi Bu sorunun cevabını, size yardım ederse çözülmüş olarak işaretlemek için almayı düşünmüyor musunuz? [Bir cevap nasıl kabul edilir?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –