URI dizinleri gibi görünüyorsun GET parametreleri geçirerek

8 Cevap php

Ben böyle bir şey bakmak URI'lerinin çok gördüm:

www.fakesite.net/stories/1234/man_invents_fire

Onlar GET parametreleri (veya başka bir şey) ise URI / 1234/man_invents_fire kısmı aslında dizinleri veya eğer ben merak ediyordum. Ben zamanlarda / man_invents_fire segmenti bir sürü / 1234 / o boyunca id bir veritabanı tablosunda hikaye numarası (ya da bir şey olduğuna inanıyorum götürdü ki, (hayır sonuçları ile silinebilir) gereksiz olduğunu fark ettik çizgiler).

If those segments of the URI are GET parameters, is there an easy way of achieving this? If they aren't, what is being done?

(Ayrıca, CodeIgnitor işlevsellik bu tür verir farkında değilim, ama kolayca CodeIgnitor olmadan elde edilebilir olmadığını öğrenmek için merak ediyordum. Ben, ancak, genellikle PHP, bu bir cevap ile ilgili ise)

Teşekkürler

8 Cevap

Yapılacak en kolay şey, bir ana index.php dosyasına everything yol ve patlayabilir ("/", $ _SERVER ['REQUEST_URI']) = $ parçaları çalıştırarak oradan Rotanızdan anlamaya;

Mod_rewrite etkinleştirme / kurduktan sonra, emin geçersiz senin docroot ait. Htaccess dosyasında bu atmak, sonra (. Htaccess okunmasına izin vermek için) apache config false ayarlı değil izin olun.

<ifModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-s #Make sure the file doesn't actually exist (needed for not re-routing things like /images/header.jpg)
    RewriteRule .  /index.php  [L,QSA] #re-route everything into index.php
</IfModule>

Bunun için google, url yeniden yazma denir, bu konuda pek çok bilgi bulabilirsiniz.

PHP bu uygulama genellikle bir. Htaccess dosyası ile yapılır ve kullanıyor apache's mod_rewrite module.

Insanların kolayca favorilerinize böylece Onlar böyle url yapmak ve arama güvenle dönebilirsiniz.

Bunu çözmek için kullandığınız dil ne bağlıdır. Bu durumda, "hikayeler" ana betik, ve "1234" kimliği ve "man_invent_fires" başlık görüntülenir.

Eğer php kullanarak ediyorsanız, bunu çözmek için $ _SERVER ['PHP_SELF'] veya $ _SERVER ['REQUEST_URI'] değişkeni kullanabilirsiniz.

Eğer böyle bir web sitesi yapmak için planlıyorsanız, bazı güvenlik akılda tutulmalıdır. Google onları aramak, ama dışarı bakmak için önemli bir sql enjektörler.

Sadece WordPress kalıcı bağlantılarınız gibi, bu genellikle Apache mod_rewrite (veya Apache kullanarak değilse bunun bir eşdeğeri) ile yapılır yapılır; ancak, aynı zamanda (ancak bu genellikle tavsiye edilmez) aynı sonucu elde etmek için bir 404 hata sayfası işleyicisi kullanabilirsiniz.

Tipik olarak, tüm sayfa istediğinde, belirtilen desen uygun olmadığını belirlemek için istenen URI ayrıştırır bir ağ geçidine yönlendirilir (muhtemelen sizin durumunuzda /{category}/{article_id}/{article_title}). Oradan, ağ geçidi genellikle uygun içerik almak için sadece article_id kullanabilirsiniz.

Sistemine bağlı olarak, category ve article_title usually ihmal / atılır ve SEO değeri tipik olarak; Ancak, bazı durumlarda category (: DB tablo sorgulamak için ne belirlemek, vb gibi) article_id bir şekilde artırmak için kullanılan olabilir.

MVC ait, Zend gibi, aynı zamanda yürütmek için burada hangi denetleyici ve yöntemini belirlemek için benzer bir teknik kullanır. Bu tür bir kullanım için bir örnek biçim /{module}/{controller}/{method} arasından seçilir; Ancak, bu son derece özelleştirilebilir.

Eh, doğru 1234 ve * main_invents_fire * parametreler olduğunu varsayarak tür bulunmaktadır. Onlar gerçekten anlamda GET parametrelerini değil HTTP protokol onları tanımlayan ama "dost" URL tutarken onlar, aynı görevi başarmak. Teknik URL rewriting olarak adlandırılan ve web bu, bu günlerde bilgi dolu olduğunu ..

İşte bir article about friendly URLs in PHP ama ben konu için googling daha yararlı sonuçlar verecek eminim.

Benden önce cevaplara ek olarak bazı arka plan bilgileri gibi bir URL sadece - bir 'Uniform Resource Locator'. Eski günlerde, genellikle bir dosya / dizin yapısı 01:01 eşleştirmek için kullanılan rağmen, tüm HTTP spec gerekli belli bir kaynak tespit etmektir. Temelde belli bir dize verilen, bu sunucu üzerinde belirli bir 'kaynak' belirtmelidir anlamına gelir. Uygulamada, bir HTTP ortamında bu genellikle mod_rewrite'ı gibi bir mekanizma ile yeniden uygulanmaktadır. Bu gibi RFC'lere: http://www.ietf.org/rfc/rfc1738.txt soyut, genel de olsa, bir güzel verir. Kavramlar sadece olsa, bazı non-açık kullanımları tasarlanması ve uygulanması sonrasında hayata.

Eğer kullanıyorsanız Symfony, sonra bunu yapmak için routing feature kullanabilirsiniz.