2010-10-10 25 views
11

htaccess rewrite göreceli yolları kırıyor

http://www.myserver.com/home/
ile
http://www.myserver.com/index.php?section=home

arasındaki haritaları gösteren bir htaccess dosyası var. Şu anda karşı karşıya olduğum sorun, tüm görüntüleri ve css varlıklar, yani

http://www.myserver.com/assets/images/
http://www.myserver.com/assets/css/
vb

adında bir alt klasörde yer almaktadır. Yeniden yönlendirme sonra tarayıcı

http://www.myserver.com/home/assets/images/
altındaki dosyaları arayacaktır, Bu geçerli bir yol değil.

Yukarıdakileri doğru alt klasöre eşleyen başka bir yeniden yazma ekleyebildim, ancak Firebug görüntülerin içinde bulunduğunu gösteriyor:

http://www.myserver.com/home/assets/images/

Bunun gerçekten sorun olmadığını biliyorum, sonuçta, Resimlerim ve css bu kural ile gayet iyi yükleniyor. Sadece gerçek yol olarak gösterilen yolu nasıl yapacağımı merak ediyorum:

http://www.myserver.com/assets/images/

Aşağıdaki htaccess dosyasımı yapıştırıyorum. Önceden çok teşekkür ederim.

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^([^/]+)/assets/(css|images|js)/(.*)$ /assets/$2/$3 [NC,L] 
RewriteRule ^([^/]+)/$ /index.php?section=$1 [NC,L]

cevap

15

sorun göreli URL'ler referans kullanılan HTML belgesinin URI temel tanım üzerinde giderilmiş olduğunu düşünmüyoruz olmasıdır. Yani bir HTML belgesindeki assets/images/ gibi göreli bir URL yolu URI yolu /home/ ile /assets/images/ yerine /home/assets/images/ çözülür.

URI çözünürlüğü sunucu tarafından değil, istemci tarafından yapıldığı için mod_rewrite ile bunu değiştiremezsiniz. Sadece çözümler şunlardır:

  • değişiklik (bu tüm göreli URI etkilediğini unutmayın) BASE element kullanarak temel tanım; Mutlak URI yollarını kullanarak
  • . assets/images/ yerine /assets/images/;
  • Göreli URI yolunu ayarlama, bu nedenle /home/'daki başvurular yol derinliğini yansıtmak için ../assets/images/ olarak ayarlanır.
+0

, ben Sadece şimdi olabilir. Sonra tekrar,

BASE
etiketini tamamen unuttum! Büyüleyici bir şekilde çalıştı. Teşekkürler Gumbo, takdir et. – irot

+0

@irot: Yine, "BASE" kullanarak temel URI'yi değiştirmenin, yalnızca göreli yollara sahip olanları değil, tüm * göreli URI'ları etkilediğini unutmayın. – Gumbo

+0

Ayrıca, çapa etiketlerini karma ile de etkiler. "#content" gibi bir href özelliğine sahip herhangi bir çapa etiketi, geçerli sayfaya değil, temel URL'ye çözülür. Tüm bunlara yeni – VirtuosiMedia

9

şöyle <head> etiketinin içinde sayfanıza bu satırı <BASE href="http://www.yoursitename.com/"> ekleyin:

<head> 
     <title>Your site title</title> 
     <BASE href="http://www.yoursitename.com/"> 
.... 
</head> 
Ben ne yazık ki ancak, mutlak için bütün göreli yollarını dönüştürme yolunu gitmek zorunda değil çalışıyordu