PHP: dostu URL'ler farklı stilleri Ayrıştırma

3 Cevap php

Ben kendi küçük bir çerçeve yazıyorum ve ben orada dostu URL'ler uygulamak için gidiyorum. mod_rewrite harika. Ama seferde dostu URL'ler çeşitli idare edebilmek istiyorum:

/index.php?ac=user&an=showprofile (fallback variant, the worst)
/index.php/user/showprofile (supposedly, can be disabled by security settings)
index.php?user/showprofile (optional, not needed)
/user/showprofile (ideal, but requires mod_rewrite or dirty ErrorDocument tricks)

Ben ne olursa olsun düzeni ile oluşturulan eski bağlantılar sonsuza kadar geçerli olacağını, böylece bir defada desteklenen tüm varyantları istiyorum. Ben ya, ben bunu yapabilirim bazı kütüphane / komut, kaçırılmış olabilir, bu benim kendi ayrıştırma fonksiyonlarını yazmak gerekir? Symfony veya Zend gibi büyük çerçeveler Algos ayıklanıyor oldukça zordur. UTF-8 kodlanmış ya magic_quotes_runtime vb URL'leri işleme correctl gibi birçok farklı unobvious durumlar da vardır ..

3 Cevap

Her iki programlı URL'lerin tüm farklı türleri arasında ayrım ve bir baz formuna bunları normalleştirmek Eğer sadece farklı normalleştirir ve gerçek hedef almak için normalize türünü kullanabileceğiniz basit bir tokenizer işlevi yazabilirsiniz. Ben değil mod_rewrite'ı olmadan yaptık. Oldukça emin olsa onsuz yapılabilir.

Ben genellikle ne url ayrıştırır ve daha sonra herhangi bir dosyaya doğrudan herhangi bir url haritası olmadan, çıktı almak için istek işleme ve yönlendirme bir demet yapar bir dizin dosyası var. Sadece bu dizin dosyasına şeyi mod_rewrite ve ayrıştırmak $_SERVER['REQUEST_URI'].

Üçüncü içindeki birinci işleme ($_GET, $_SERVER["REQUEST_URI"] ve $_SERVER["QUERY_STRING"]) PHP geçirilir olmalıdır.

Dördüncü RewriteCond !-f kullanarak mod_rewrite ile yapılır ve uygun bir RewriteRule edilebilir.

Sen URL'lerin tüm farklı izin kaçınmalısınız. Deftere tüm bu URL'ler aynı içeriği gösteren o SEler yinelenen içerik olarak göreceksiniz ve "bölme" sıralamanızı sona erecek. Her şeyin bir URL üzerinde duruldu eğer mantıklı Başka bir deyişle, dört sayfaların her ... yanı sıra dörtte rütbe olacaktır.

Just choose one URL format that's simple for users, and stick with it. Şahsen ben mod_rewrite ile, sonuncusu tercih ederim. Sizin soru yoktur mod_rewrite kullanarak "yanlış" bir şey olduğunu ima eder.

Ayrıca bu hatta gerekli ise, bir 301, resmi URL'ye yönlendirme $_SERVER["REQUEST_URI"] talep ediliyor ne URL algılamak ve yapılacak gibi şeyler kullanabilirsiniz.