幾個比較常見的 PHP framework 像是 Silex、Slim、FuelPHP 和 Laravel,都是將 resource path 直接放在 index.php 後方。例如網址為「/my.site/user/10」則會被改寫為「/my.site/index.php/user/10」,所以在測試環境下,如果不想設定 URL rewrite 可以直接把 resource path 手動放在 index.php 後方。
今天研究 Phalcon 的 routing 很久,不管怎麼設定就是沒有 match 到 controller,而且還沒有任何錯誤訊息。把整個文件都翻遍以後,才發現 .htaccess 有個不一樣的地方:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
Phalcon 的 rewrite 行為和上述的不一樣,resource path 會轉到「_url」這個參數上面,所以若是沒有動到「_url」這個參數,router 就視為要開啟首頁,不管 index.php 後面接什麼都不會改變行為 ….。
可惡,八小時就這樣飛了 …..