天天看點

YII中url重寫

在弄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>