2011-11-18 32 views
3

我正在使用Windows 2008R2上的PHP5.3.6。如何在我自己的PHP應用程序中創建類似於Wordpress的URL重寫

在Wordpress中,我可以設置各種最終路由到一個PHP頁面的友好URL。從外部看,它看起來像許多頁面,但只有一個。

在web.config文件(或.htaccess)文件中,只有一條指令,而不是每頁/文章有一個條目。

這意味着PHP正在查看URL,將其與數據庫(文章標題存在的位置)進行比較,然後透明地路由到該頁面。

所有這些對最終用戶都是透明的。

這是如何在非wordpress PHP網站中完成的?

回答

1

這是一個related answer,涉及如何做到這一點。簡而言之,您需要檢查$_SERVER['REQUEST_URI']並解析它。

這裏的解析請求的一個簡單的例子(MVC路由器通常是可配置的,並且可以路由和匹配許多不同的URI結構):

如果您的格式是一樣的東西news/article-slig你可以做到這一點(例如代碼,這樣做有更少的剛性方法):

list($section, $slug) = explode('/', trim($_SERVER['REQUEST_URI'], '/')); 

在這一點上你的PHP腳本知道如何解釋請求。如果這是一個完整的MVC應用程序,路由器將加載匹配的控制器並將請求數據傳遞給它。如果你只是做一個簡單的單頁腳本,加載一些數據,那麼你的數據庫調用會隨之而來。

如果請求是無效的,那麼一個簡單的header()呼叫可以通知瀏覽器:

header('HTTP/1.0 404 Not Found'); 

而且任何數據輸出將是你的404頁面的內容。

+0

真棒。謝謝。那麼我不需要發出一個200成功或404沒有找到一個頁面?如果是這樣的話,我該如何將它發送給瀏覽器? –

+0

@HumanBacon更新了一些關於發送回覆的信息。 –

1

我不能保證WordPress的,我用一個方法是重新在.htaccess到的index.php 404的,然後有通過解析該文件排序:

$sub = $_SERVER['SERVER_NAME']; 
$file = $_SERVER['REQUEST_URI']; 

$sub可以用來掩蓋不存在的子域到特定的文件。 $file可用於交換機或if子句以包含/重定向基於文件名。

顯然,您需要確保別名'不是doc根中的實際文件。

+0

這看起來像404搜索引擎嗎?看到我上面的評論。 –

+0

它不會像瀏覽器的404一樣,但是,設置'mod_rewrite'來匹配一組特定的URI也同樣簡單。例如:'/ page/*' –

相關問題