. Htaccess mod_rewrite olmadan Pretty URL'ler,

8 Cevap php

. Htaccess erişmek için bir olasılık olmadan ben yaratıcı bir çıkmazın içinde kendimi buluyorum. There is no mod_rewriting for me. Yine de, ben gibi güzel şeyler yapabilmek istiyorum:

http://www.example.com/Blog/2009/12/10/
http://www.example.com/Title_Of_This_Page

What are my alternatives?

Cevaplar cevap veren:

  • Ben PHP5 ile inşa ediyorum
  • Ben. Htaccess erişim yok
  • http://www.example.com/index.php/Blog/ bilinen bir tekniktir ama ben bunu tercih etmiyorum. Yani söylemek php gösterir.
  • Nasıl extensionless PHP dosyaları oluşturmak istiyorsunuz? Bu hile yapmak istiyorsunuz?
  • Ne kadar özel 404 teknik zarar performansını kullanarak olur?

8 Cevap

Eğer sunucu için özel hata belgeleri ayarlamak için izinleri ettik Eğer 404 isteklerini yönlendirmek için kullanabilirsiniz.

Örneğin Apache için (http://httpd.apache.org/docs/2.0/mod/core.html#errordocument)

ErrorDocument 404 /index.php

Index.php sonra $ _SERVER dizisinde verileri kullanarak isteğinizi devam edebilirsiniz.

Ayrıca gibi adresler olabilir

http://domain.com/index.php/Blog/Hello_World

PHP5 ile kutunun dışında. Daha sonra kullanarak URL parametreleri okuyabilir

echo $_SERVER['PATH_INFO'];

Uygulamanızda bunları kullanmadan önce PATH_INFO ve diğer tüm istek değişkenleri filtre / doğrulamak için unutmayın.

: Oldukça basit bir yolu olduğunu

  • .htaccess bir 404 ErrorDocument (örneğin PHP) beyan
  • $_SERVER kullanarak sorguyu ayrıştırmak ve herhangi bir sonuç karşılık görmek
  • bu yüzden header() kullanarak durumu 200 HTTP durum 404 değiştirin ve eklerseniz index.php

Tek yolu, özel bir 404 sayfası kullanmaktır. Sen web sunucunun MIME türlerini yeniden yapılandırmadan PHP yorumlayıcısı ile extensionless dosyalarını yorumlamak için hiçbir imkanı yok. Ama sen bile. Htaccess düzenleyemezsiniz söylüyorlar, başka hiçbir yolu yoktur.

Eğer bir bölü atlarsanız, Apache adı ne olursa olsun uzantısı, en azından 2 sunucularında ben erişimi olması hangi maçlar [alfabetik] ilk dosya hizmet verecek.

Ben sizin sorununuzu çözmek için kullanabilirsiniz nasıl bilmiyorum, ama bu noktada yararlı olabilir.

For example if http://www.somesite.com/abc.html and http://www.somesite.com/abc.php both exist and http://www.somesite.com/abc is requested, http://www.somesite.com/abc.html will be served.

Bu soru çok eski olduğunu biliyorum ama ben başkasının bu mümkün çözüm önermek görmedim ...

Sadece URL, yani etki bölümünden sonra bir soru işareti ekleyerek ne istediğinizi çok yakın alabilirsiniz;

http://www.example.com/?Blog/2009/12/10/
http://www.example.com/?Title_Of_This_Page

Yukarıdaki HTTP isteklerinin her ikisi de şimdi aynı PHP komut dosyası tarafından ele alınacaktır;

www.example.com/index.php

ve index.php script, $_SERVER['REQUEST_URI'] Yukarıdaki iki sayfa için sırasıyla olacak;

Blog/2009/12/10/

Title_Of_This_Page

Ancak istiyorum böylece onları işleyebilir.

Eğer tanımlı kullanıcı-dostu URL ayrıştırır bir tanım sınıf yazabilirsiniz.

MultiViews seçeneği etkin olduğu ya da bunu sağlamak için anahtarlarını tutan kim ikna edebilir eğer, / 'example.com/Blog/foo isteklerini geçilecek blog.php adında bir komut dosyası yapmak ve alabilirsiniz foo '$_SERVER['PATH_INFO'].