Nginx偽靜態規則簡記
阿新 • • 發佈:2018-10-31
背景:
公司域名 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位數。