Yii2.0預設的訪問形式為:
http://www.xxx.com/index.php?r=post/index&id=100
一般我們都會考慮將其美化一下,變成如下的形式:
http://www.xxx.com/post/100.html
接下來就是美化的步驟
一、配置http伺服器
1、Apache
在入口檔案(index.php)所在的目錄下新建一個文字檔案,接著另存為.htaccess,用編輯器開啟此檔案加入:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
儲存即可
2、Nginx
在nginx配置檔案(我本地是/conf/vhosts/test.conf檔案)中加入:
location/{
try_files $uri $uri/ /index.php?$query_string;
}
整個server配置類似:
server {
listen80;
server_name test.yii.com;
root "/Projects/yii/web";
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
error_page /50x.html;
location = /50x.html {
root html;
}
location~ .php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+.php)(/?.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
二、配置yii
開啟config目錄下的web.php,在$config = [ `components`=>[] ]中加入以下內容:
`urlManager` => [
//開啟url美化
`enablePrettyUrl` => true,
//隱藏index.php
`showScriptName` => false,
//禁用嚴格匹配模式
`enableStrictParsing` => false,
//url字尾名稱
`suffix`=>`.html`,
//url規則
`rules` => [
//post後面跟上數字的url,則將數字賦給id引數,然後傳遞給 post/view,實際上訪問的是 post/view?id=XXX
`post/<id:d+>`=>`post/view`
]
],
rules陣列中配置具體的路由規則
三、重啟http伺服器
至此,配置完畢。
注意事項
http伺服器中配置的虛擬域名必須直接指向入口檔案所在目錄,否則在url省略index.php的情況下,http伺服器無法正確訪問到專案。
舉個例子:
配置test.yii.com虛擬域名指向了/Projects/yii/web目錄,而你的專案入口檔案其實是在/Projects/yii/web/test目錄
瀏覽器訪問專案的url是:
http://test.yii.com/test/index.php?r=post/view&id=100
這時你把url換成
http://test.yii.com/test/post/100.html
是行不通的