一、什么是路由重寫
原本的HTTP訪問地址: www.test.com/index.php?r=post/view&id=100 表示這個請求將由PostController 的 actionView來處理。
重寫后的HTTP訪問地址 www.test.com/post/view/id/100 這樣的鏈接看起來簡潔美觀,對於用戶比較友好。同時,也比較適合搜索引擎的胃口, 據說是SEO的手段之一。
二、Apache 路由重寫
(一)開啟Apache的重寫模塊
1. 打開apache的config的 hhttpd.conf 將 #LoadModule rewrite_module modules/mod_rewrite.so 的#號去掉
2. 重啟Apache服務器即可
(二)虛擬主機配置
1. 打開 Apache\conf\vhosts.conf配置路徑
2. 將配置修改為如下:
<VirtualHost 127.0.0.1:80> ServerName test-yii2.com DocumentRoot F:/wamp64/www/yii2/frontend/web <Directory "F:/wamp64/www/yii2/frontend/web"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require all granted RewriteEngine on # 如果請求的是真實存在的文件或目錄,直接訪問 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 如果請求的不是真實文件或目錄,分發請求至 index.php RewriteRule . index.php </Directory> </VirtualHost>
3. 重啟Apache
(三)還有另外一種配置方式,無需重啟Apache服務器,當時改當時生效。
1. 在 “F:/wamp64/www/yii2/frontend/web” 目錄下增加 .htaccess 代碼如下:
RewriteEngine on # 如果請求的是真實存在的文件或目錄,直接訪問 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 如果請求的不是真實文件或目錄,分發請求至 index.php RewriteRule . index.php
(四) YII配置
1. 在main.php下 components
這個數組中增加如下如下配置:
'urlManager' => [ 'enablePrettyUrl' => true, //開啟美化url配置,默認關閉 'enableStrictParsing' => false, //不啟用嚴格解析,默認不啟用.如果設置為true,則必須建立rules規則,且路徑必須符合一條以上規則才允許訪問 'showScriptName' => false, //隱藏index.php 'rules' => [ // http://frontend.com/site/index 重寫為 http://frontend.com/site '<controller:\w+>/'=>'<controller>/index', // http://frontend.com/site/view?id=1 重寫為 http://frontend.com/site/1 '<controller:\w+>/<id:\d+>' => '<controller>/view', // http://frontend.com/site/ceshi?id=123 重寫為 http://frontend.com/site/ceshi/123 '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', ] ],