PHP: mod_rewrite app kırma bağlantıları için en iyi çözüm

3 Cevap php

Ben tüm istekleri index.php?url=* varolmayan dosya / dizinleri hedef yönlendirmek için yeniden mod kullanıyorum

Bu kesinlikle mod_rewrite ile henüz bir sorun var en yaygın şey:

Sayfa url "mydomain.com/blog/view/1" ise doğal olarak, tarayıcı "sanal" dizin "mydomain.com / blog / view /" görüntü, stil ve göreli bağlantıları arayacaktır.

Problem 1:

  • Baz etiketi iyi çözüm kullanıyor? Ama, orada PHP çerçeveler hiçbiri taban etiketi kullanmak görüyoruz.

  • Ben şu anda bir regex çıkıştan önce doğru yolu gösterecek tüm göreli bağlantıları yerine yaşıyorum. Is "Tamam" mı?

Problem 2:

Bu sunucu mod_rewrite'ın desteklemediği mümkündür. Ancak, görüntü, stil ve istekleri toplayıcı index.php gibi tüm kamu dosyalar dizininde bulunan /myapp/public. Kamu da aslında tüm kullanıcılar kök dizin sanki Normalde mod_rewrite noktaları tüm istek /public öyle görünüyor.

Hiçbir mod_rewrite varsa Ancak, daha sonra header() çağrısı ile kök dizinden /public için kullanıcılara işaret var. Yani, ancak aniden tüm görüntüleri aracılığıyla vb denilen gerekir çünkü tüm bağlantıları tekrar kırık olduğunu /public/myimage.jpg

Ek bilgi: yok mod_rewrite olduğunda yukarıdaki isteği bu gibi olacaktır: mydomain.com/public/index.php/blog/view/1

  • Hem ne sorunları için en iyi çözüm olurdu?

Edit/Additional question:

Düz htaccess kodu kullanarak / public / baz dir yapmak için bir yolu var mı?

3 Cevap

O ("çirkin" adresler sahip pahasına) çalışması için mod_rewrite gerekmez böyle bir şekilde uygulama yazmak. Aşamalı olarak arzu edilen sonucu elde etmek için mod_rewrite ile geliştirin. Bu belki size app bazı ana yol geneli bilgi depolamak gerekir demektir.

I don't understand these problems at all. Yes, this is surely the most common thing you do with mod_rewrite, yet with 2 conditions:

RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d

Yani, hiçbir şey mevcut görüntüleri zarar.

Neden kullanmak için değil sadece absolute path, örneğin /myapp/public/myimage.jpg, bu nedenle, hiçbir sanal dizin görüntü yolunu zarar edecek?

hangi yolu bilgi hakkında? Sen mod_rewrite olmadan kullanabilirsiniz

/ Index.php / yol / / başka / file.jpg

<?php
echo $_SERVER["PATH_INFO"]; // outputs /path/to/another/file.jpg
?>

Her neyse, mod_rewrite sizin sunucusu tarafından destekleniyorsa bilmek istiyorsanız:

<?php
echo "mod_rewrite : ".(!empty($_SERVER["REDIRECT_URL"])?"supported":"not supported");
?>

Mod_rewrite çözümdür ya da belki PATH_INFO'yu hem de bakabiliriz destek fonksiyonlarını yapabilir, sizin için daha uygundur, o zaman bilirsiniz.