在弄yii的url重寫,希望能把url改成更好記的形式,同時去掉index.php的部分。轉化前後的對比:
修改前: http://localhost/index.php?r=site/page?view=about
修改後: http://localhost/site/page?view=about
查了些資料完成以上的效果。我到環境是: apache2(httpd-2.2.21), PHP5.3.8, Yii 1.1.8
STEP 1
首先先確定apache2有rewrite子產品,具體可通過phpinfo()看到apache的子產品。
我在這步折騰了不少時間,不管怎麼編譯都出不來,最後是通過如下完成到:
cd /home/qteqpid/Software/httpd-2.2.3/modules/mappers/
/usr/local/apache2/bin/apxs -c mod_rewrite.c
/usr/local/apache2/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果沒出錯,在/usr/local/apache2/modules/ 中就會有mod_rewrite.so了 注意,然後隻能在httpd.conf檔案裡添加以下一行,,
LoadModule rewrite_module modules/mod_rewrite.so
重新開機apache即可。
STEP 2
然後修改protected/config/main.php,修改如下:
‘urlManager’=>array(
‘urlFormat’=>’path’,
‘showScriptName’=>false, // 這一步是将代碼裡連結的index.php隐藏掉。
‘rules’=>array(
‘<controller:\w+>/<id:\d+>’=>’<controller>/view’,
‘<controller:\w+>/<action:\w+>/<id:\d+>’=>’<controller>/<action>’,
‘<controller:\w+>/<action:\w+>’=>’<controller>/<action>’,
),
),
<IfModule rewrite_module>
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
</IfModule>