Yii2框架URL美化教程

Charles發表於2019-02-16

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

是行不通的

相關文章