1. 程式人生 > >Nginx偽靜態規則簡記

Nginx偽靜態規則簡記

背景:

公司域名 z.yb.com 下有多個子專案目錄結構大致是 z.yb.com/own/xys | z.yb.com/2017/abc | z.yb.com/2018/def 有二級也有三級目錄,應開發需求某專案訪問地址是:z.yb.com/own/xys/index.php/admin/login 需要把 index.php隱藏為 z.yb.com/own/xys/index/admin/login 進行訪問


借鑑網上其他部落格的寫法,設定以下三種場景:

場景一
將 http://www.abc.com/index.php/front/index/index
重寫成 http://www.abc.com/a.html
場景二
將 http://www.abc.com/index.php/front/index/parse?name=itboy&age=18
重寫成 http://www.abc.com/parse-itboy-18.html
場景三(同一域名下,需要匹配隨時新增的二三級目錄,並隱藏index.php的.php字尾)
將 http://z.yb.com/own/xys/index.php/admin/login  以及 http://z.yb.com/2018/gdhp/index.php/login
重寫成 http://z.yb.com/own/xys/index/admin/login 以及 http://z.yb.com/2018/gdhp/index/login

建議在nginx/conf目錄下新建rewrite.conf配置檔案中編寫偽靜態規則,寫完後在域名.conf檔案中插入rewrite.conf檔案即可(用include rewrite.conf插入)
樓主的nginx配置檔案如下:

server
    {
        listen 80;
        server_name z.yb.com;
        index index.html index.php index.htm index.php default.html default.htm default.php;
        root  /var/www/apps/z.yb.com;
include rewrite.conf; include none.conf; error_page 502 /502.html; include enable-php-pathinfo.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\. { deny all; } access_log /var/www/wwwlogs/z.yb.com.log; error_log /var/www/wwwlogs/error.z.yb.com.log; }

rewrite.conf檔案內容如下:

location /
{
		#場景一
		#http://www.abc.com/index.php/front/index/index 變成 http://www.abc.com/a.html
		rewrite a.html /index.php/front/index/index last;
		#場景二
		#http://www.abc.com/index.php/front/index/parse?name=itboy&age=18 變成 http://www.abc.com/parse-itboy-18.html
		rewrite parse-(\w+)-(\d+).html /index.php/front/index/parse/name/$1/age/$2 last;
		#場景三
		#http://z.yb.com/own/xys/index.php/admin/login  以及 http://z.yb.com/2018/gdhp/index.php/login 變成 http://z.yb.com/own/xys/index/admin/login 以及 http://z.yb.com/2018/gdhp/index/login
        rewrite ^/(\w+)/(\w+)/(.*)$ /$1/$2/index.php?s=$3 last;  #針對own目錄偽靜態規則,$1對應(\w+)部分,$2對應第二個(\w+)部分,$3對應(.*)部分,$代表直至最後
        rewrite ^/(\d+)/(\w+)/(.*)$ /$1/$2/index.php?s=$3 last;  #針對後期的2018下的子專案偽靜態規則
}
說明:

其實都是很簡單的對號入座原理而已,拿場景二來說明,第一個正則(\w+)對應的就是$1,第二個正則(\d+)對應的就是$2,另外,\w是數字字母下劃線的意思,\d是數字的意思 +是最少一個{1,} 1到無窮大{1,3} 這樣是1-3位數。