2009-08-22 20 views
6

Jak zaimplementować routing adresów URL w PHP.Jak wdrożyć routing adresów URL w PHP

+0

http: // stackoverflow.com/questions/1316021/how-to-use-url-routing-in-php – cherouvim

+0

Możliwy duplikat: http://stackoverflow.com/questions/125677/php-application-url-routing. Spróbuj spojrzeć na to pytanie. – Macha

+0

W rzeczywistości, możliwe trzy egzemplarze =) – Zed

Odpowiedz

16

Jeśli używasz Apache można zrobić routing URL za pośrednictwem mod_rewrite.

Mały przykład:

RewriteEngine On 
RewriteRule ^(dir1)/?(path2)? main.php?dir=$1&path=$2 

To będzie jakieś życzenie jak

http://yoursite.com/dir1/path1 

obsługiwanym przez

http://yoursite.com/main.php?dir=dir1&path=path2 

Więcej przykładów here.

Druga alternatywa mieć każde żądanie przekierować do pojedynczego pliku php

RewriteEngine On 
RewriteRule (.*) main.php?request=$1 

a następnie zrobić to w kodzie, gdzie można wykorzystać do similar approach, poprzez zestaw wyrażeń regularnych, które są dopasowane przez niektóre kod, a następnie przekierowany przez header() lub tylko wewnętrznie.

10

Przede wszystkim będziesz potrzebować Apache's (Przypuszczam, że twój serwer WWW to Apache)mod_rewrite, aby być włączony.


Następnie należy utworzyć RewriteRule, aby przekierować wszystko na swoją stronę index.php.
Coś takiego może zrobić:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php 

To przekieruje każde żądanie do pliku, który nie istnieje na index.php; oznacza to, że jeśli żądany adres URL to www.example.com/blah, to w rzeczywistości będzie to wywołanie index.php.

O tym, oto kilka z linku, który może pomóc:


Następnie, ta strona musi określić, co ma być wyświetlane w zależności od jaki początkowy URL został wywołany - lub jakie parametry są odbierane.

Można to zrobić na przykład za pomocą Design Pattern Front Controller - jest on zaimplementowany w większości nowoczesnych frameworków PHP.


Na ten temat było wiele pytań dotyczących tego tematu; niektóre z nich (i ich odpowiedzi) prawdopodobnie mogą ci pomóc. Na przykład:

+0

Powinna to być standardowa odpowiedź na to pytanie. Działa na każdym języku po stronie serwera działającym na Apache, a stosy reguł przepisywania nie są tak trwałe. – WCWedin

Powiązane problemy