Yii2.0默認的訪問形式爲:php
http://www.xxx.com/index.php?r=post/index&id=100
通常咱們都會考慮將其美化一下,變成以下的形式:html
http://www.xxx.com/post/100.html
接下來就是美化的步驟nginx
在入口文件(index.php)所在的目錄下新建一個文本文件,接着另存爲.htaccess,用編輯器打開此文件加入:web
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
保存便可數組
在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; } }
打開config目錄下的web.php,在$config = [ 'components'=>[] ]中加入如下內容:yii
'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數組中配置具體的路由規則編輯器
至此,配置完畢。post
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
是行不通的