2009-02-05 13 views
7

Sunucu günlüklerimden bakıldığında, sitemde çok sayıda sayfanın çeşitli farklı dizinlerde favicon.ico, favicon.jpg, favicon.png vb. Talep ettiğini görüyorum. Bunun yerine her yanlış istek, bazı apache /favicon.icomod_rewrite regex yalnızca belirli bir dize olmadığında eşleşecek şekilde eşleşecek

Benim ilk yönlendirmek için "favicon" içeren herhangi url için bir istek değiştirmek üzere yönlendirme kurallarını yazıyorum nereden geldiğini anlamaya çalışarak her sayfası üzerinden yürüyen bir

RewriteRule favicon /favicon.ico [R=301,L] 

Ama bu aslında /favicon.ico istendiğinde o sonsuz yeniden yönlendirme döngüsü içine göndermek anlamına geliyordu: saf girişimi bu oldu.

Temelde ne ben gerek bu etkiye sahip bir regex geçerli:

| Request    | Response  | 
|------------------------|--------------| 
| favicon.png   | /favicon.ico | 
| directory/favicon.png | /favicon.ico | 
| directory/favicon.ico | /favicon.ico | 
| favicon.ico   | <no match> | 

cevap

6

deneyin ben bu kuralı kullanmak

RewriteCond %{REQUEST_URI} !^/favicon\.ico [NC] # if not already going to favicon.ico 
RewriteCond %{REQUEST_URI} favicon\.ico [NC] # edit this line to match your favicon matching regex 
RewriteRule (.*) http://www.domain.com.au/favicon.ico [R=301,L] #redirect to the real address 
+0

alex teşekkür hey! – nickf

+0

endişelenmeyin, sorularımın yeterince yanıtını verdiniz :) – alex

+0

Bu mükemmel cevaba kendi cevabımda bazı önerilerde bulundum. – Dscoduc

0

bu: değişikliklerin

RewriteCond %{REQUEST_URI} !^/favicon\.ico$ 
RewriteRule favicon /favicon.ico [L,R=301] 
11

Çift Alex's excellent answer:

012'yi değiştirmeyi öneririm

RewriteCond %{REQUEST_URI} favicon\.(ico|png|gif)$ [NC] 

mevcut istek ana bilgisayar adını kapmak 3 koşul ekle: İsteğe sonunda sadece .ico uzantılı fazla

RewriteCond %{REQUEST_URI} !^/favicon\.ico [NC] 

kontrol:

aynı bu bölümü tutun:

:

RewriteCond %{HTTP_HOST} (.+) 

son olarak,% 1 (a backreference representing the last matched condition) kullanmak için son RewriteRule değiştirmek

RewriteRule (.*) http://%1/favicon.ico [R=301,L] 

nihai sonuç olmazdı gibi: Bu birileri yardımcı olur

RewriteCond %{REQUEST_URI} !^/favicon\.ico [NC] 
RewriteCond %{REQUEST_URI} favicon\.(ico|png|gif)$ [NC] 
RewriteCond %{HTTP_HOST} (.+) 
RewriteRule (.*) http://%1/favicon.ico [R=301,L] 

Hope ... kafamın üst Kapalı

+1

+1 iyi detaylı cevap! – alex

+0

Geçen gün yaptığım bir şey, uzantı denetleyicisini değiştirmek için. (Ico | gif | png | jpe? G) iyi ölçüme :) – alex

+0

yeniden yazma kuralı 'RewriteRule (. *) Http: //% 1 olmalıdır /favicon.ico [R = 301, L] ''% 1' '' backreference' olduğundan, diğer bir deyişle '% 1' son eşleşen RewriteRule 'ı verirken'% 3' ise üçüncü-son eşleşen RewriteCond değerini verir. (ki bu da ilk RewriteCond'dur ve 'gruplandırılmış bir bölüm' bile olmayabilir) - bkz. http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond – goredwards

1

:

RewriteRule favicon[.](\w*)$ /favicon.ico [L] 
İlgili konular