Nasıl http://stackoverflow.com/posts/1807421/edit gibi bir URL PHP kuruldu?

6 Cevap php

Eğer stackoverflow.com bir soruyu düzenlemek zaman, böyle bir URL'ye yönlendirilir:

http://stackoverflow.com/posts/1807421/edit

Ama genellikle, bu olmalıdır

http://stackoverflow.com/posts/1807491/edit.php

veya

http://stackoverflow.com/posts/edit.php?id=1807491

Nasıl oldu

http://stackoverflow.com/posts/1807421/edit created?

Ben Stackoverflow.com PHP kullanılarak oluşturulan olmadığını biliyorum, ama ben PHP bunu başarmak için nasıl merak ediyorum?

6 Cevap

Apache ve PHP ile, aşağıdaki gibi apache config bir mod_rewrite kuralı kullanarak örneklerinden birini gerçekleştirebilir:

RewriteEngine On
RewriteRule ^/posts/(\d+)/edit /posts/edit.php?id=$1

Bu "temiz" şeklinde URL arar ve onlar içten belirli bir PHP komut dosyası yönlendirilir böylece sonra onları yeniden yazıyor.

Oldukça sık sık bu gibi kurallar örneğini gibi bir şey, bir "PostsController" sınıf yapmak ve bir düzenleme isteği işlemek için isteyebilir ortak bir denetleyici komut, içine tüm istekleri yönlendirmek için kullanılır. Bu, çoğu PHP uygulama çatıları ortak bir özelliktir.

Bu yönlendirme denir. Konuyla ilgili tutorials bir göz atın.

Eğer gibi bir çerçeve kullanıyorsanız cake php içeri inşa edilmelidir

Kendimi almak ister yaklaşımdır Apache .htaccess / mod_rewrite ve isteğe bağlı olarak bir PHP dosyasını kullanabilirsiniz.

. Htaccess için, böyle bir şey:

RewriteEngine On
RewriteRule ^(.*)$ index.php

Sonra PHP dosyasında, böyle bir şey yapabilirsiniz:

Aşağıdaki ilk bölü sonra her şeyi almak gerekir.

$url = $_SERVER['REQUEST_URI'];

Daha sonra bir diziye çevirmek için patlayabilir kullanabilirsiniz.

$split = explode('/', $url);

Şimdi yüke ne belirlemek için dizi kullanabilirsiniz:

if ($split[1] == 'home')
{
// display homepage
}

0 genellikle boş olacağından dizisi 1'den başlıyor.

Gerçekten mod_rewrite tarafından yapılan veya MultiViews ile oluyor. Ama mod_rewrite'ın tercih ederim.

Birincisi: Bir oluşturmak, bu içeriği ile htaccessfile.:

RewriteEngine On
RewriteRule ^posts/([0-9])/(edit|delete)$ /index.php?page=posts&postId=$1&action=$2

Apaçık, mod_rewrite sizin hostingprovider tarafından etkin olmalıdır ;)

Mod_rewrite'ın kullanılarak bu çok kolay bir şekilde elde edilebilir.

Sen htaccess kullanmak + bir URI çözümleyici sınıf yazabilirsiniz.