2011-07-22 58 views
0

我們都知道,WordPress的有像下面 RewriteEngine敘述簡單的.htaccess代碼上 RewriteBase/需要幫助複製的.htaccess mod_rewrite的重定向功能在PHP像WordPress的

# only rewrite if the requested file doesn't exist 
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle  
RewriteRule ^(.*)$ /index.php/$1 [L] 

但是,如果我重定向到索引的所有請求。 PHP,我認爲在PHP中處理每個重寫都變得非常麻煩。目前我有一個邏輯,像維護一個數據庫表與所有有效的重定向。但我仍然不知道如何處理規則([0-9] +)。

如果有人實施了這樣的事情之前或心中都有一個邏輯,你可以請指導我在這件事情

的唯一目的,我這樣做,是因爲我想在添加/刪除類別靈活性我的網站菜單。我不想每次都去.htaccess並在所有地方進行編輯。我想創造出更多的像一個CMS在那裏用戶可以添加刪除類別

回答

1

我的建議是建立基於PHP的路由的基本想法是,你做這樣的事情:

RewriteEngine On 

# skip all files with extensions other than .html 
# this way if you want you can append the .html to dynamic pages 
# which wont really exist as a file 
RewriteCond %{REQUEST_URI} \..+$ 
RewriteCond %{REQUEST_URI} !\.html$ 
RewriteRule .* - [L] 

// redirect everything to your front controller 
RewriteRule ^(.*)$ index.php [QSA,L] 

注意你是如何讓everythign去index.php,但你不要重寫任何變量或任何東西。這是因爲你將用php來計算基於URL的模式。爲了做到這一點,你需要實現一個路由器。基本上,路由器接受請求並將其與模式匹配,然後根據模式確定任何參數。

有現有的庫都來爲你做這個。例如Zend_Controller_Router

+0

非常感謝prodigitalson,但是您能否更清楚地瞭解「路由器」究竟是什麼?有沒有路由器實現的好例子,類似於我的目的,可以共享?再次感謝:) –

+0

例如,您可以查看大多數主要的PHP框架([Zend](http://framework.zend.com/code/filedetails.php?repname=Zend+Framework&path=%2Fbranches%2Frelease-1.11%2Flibrary%2FZend%2FController%2FRouter%2FRewrite.php ),[Symfony](http://trac.symfony-project.org/browser/branches/1.4/lib/routing/sfPatternRouting.class.php),[Cake](https://github.com/cakephp/cakephp /blob/master/cake/libs/router.php),[CI](https://bitbucket.org/ellislab/codeigniter-reactor/src/d406084f5b ef/system/core/Router.php)等等),他們都有某種實現。 – prodigitalson

+0

謝謝prodigitalson..will檢查出來 –

1

我不明白的問題,WordPress的已經處理了這一切爲您服務。除非你的意思是你沒有使用WordPress?在這種情況下,是的,你可以這樣做。你想要什麼樣的URL結構?你可以寫一個規則,像這樣:

RewriteRule ^category/(.*)$ categories.php?cat=$1 [L] 

要像domain.com/category/dogs一個URL重寫domain.com/categories.php?cat=dogs。很明顯,你可以爲標籤調整此根據自己的喜好,並寫了幾個類似的規則,崗位等

在PHP處理路由將是一個更具活力和「優雅」的解決方案。你可以嘗試使用像CodeIgniter這樣的框架,這將自動爲你管理路由,並且可以很容易地定義自定義路由。可能比編寫一堆.htaccess規則更好。

+0

感謝基督徒,但我有格式http://sitename.com/entertainment/,http://sitename.com/tech/,http://sitename.com/news/等網址...和將來還可以添加更多類別。所以,我不想處理它在.htaccess中,要處理它在PHP ...是的,我不使用wordpress..its自己的自定義網站 –

+0

在這種情況下,你可以使用一個框架像笨管理或者你可以編寫一個通用的.htaccess規則(如RewriteRule ^(。*)/(。*)$ categories.php?cat = $ 1&post = $ 2),這將允許你使用你指定的URL結構。 –

+0

再次感謝Christian,但我們可以簡單地僅僅使用Codeigniter框架的路由器部分?我不想使用整個框架 –