2011-11-14 56 views
3

我找不出Zend Framework如何控制路由。我其實是想創建自己的控制器/路由類,寫了相同的代碼的Zend reccomends對的.htaccess重寫到位於網站的根目錄的index.php文件:Zend如何使用mod_rewrite在前端控制器中解析URL?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

我不線不明白是最後一個。它沒有捕獲組和$變量。在index.php中,我無法捕捉$ _GET中的任何內容,該內容爲空。它的工作的唯一辦法是:

RewriteRule ^(.*)$ index.php?uri=$1 [NC,L] 

,然後分析$ _GET [「URI」],這對我來說這將是其形式爲「控制器/動作/參數1/param1value」。

但是解決這個問題並不使用'uri'變量會很好。在Zend項目中,這只是起作用。有人能解釋我Zend如何用這種重寫來解析URL嗎?

回答

4

最後一條規則將文件實際不存在的所有請求(請參閱前面的規則)轉發到加載Zend Framework並處理請求的index.php。如果你追蹤Zend用它做什麼,最終你會發現你通過Front Controller得到Controller/Request/Http.php,該控制器使用幾個$_SERVER變量來確定請求的內容。

我建議您自己編寫index.php並檢查$_SERVER中的元素並查看Controller/Request/Http.php中的代碼。

print_r($_SERVER); 
+0

因此,$ _SERVER ['REQUEST_URI']可以在解壓縮主機部分後解析。謝謝,這表明我朝着正確的方向前進。 – talereader

相關問題