一個(gè)客戶用的是阿里云虛擬主機(jī),想把二級(jí)域名綁定到二級(jí)目錄訪問,眾所周知虛擬主機(jī)雖然能綁定多個(gè)域名,但是只能指定一個(gè)根目錄,也就是所有域名的訪問都是指向到根目錄。
一共是開發(fā)了PC端、WAP端、管理端三個(gè)段,都要部署上去,用的vue-cli開發(fā),路由是 domain/page 形式的 (非domain/#/pages),這對(duì)虛擬主機(jī)的支持非常不好,因?yàn)槌薖C端,其他端都只能放二級(jí)目錄中,這樣的話就只能通過二級(jí)域名,利用nginx代理到二級(jí)目錄
于是在各種搜索引擎的強(qiáng)力加持下,結(jié)合自己的理解,嘗試了幾個(gè)小時(shí)終于成功了,直接放配置
location / {
if ($host = "wap.xxx.cn") {
rewrite ^/(.*)$ /wap/$1 last;
}
if ($host = "admin.xxx.cn") {
rewrite ^/(.*)$ /admin/$1 last;
}
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
}
location /wap {
if (!-e $request_filename) {
rewrite ^/(.*)$ /wap/index.php last;
break;
}
}
location /admin {
if (!-e $request_filename) {
rewrite ^/(.*)$ /admin/index.php last;
break;
}
}
劃重點(diǎn):不知道為什么這樣設(shè)置后,index index.html index.php 不起作用了,它只找index.php,否則404,所以我就吧index.html 改名為 index.php
剖析
首先是二級(jí)域名代理到二級(jí)目錄
if ($host = "admin.xxx.cn") {
rewrite ^/(.*)$ /admin/$1 last;
}
避坑:如果只寫這個(gè),會(huì)重寫死循環(huán),需要把last改為break
當(dāng)寫好上面的代理后,能正常訪問靜態(tài)文件,但是由于我們的前端是 domain/pages 這種格式的,刷新頁面后直接訪問到/index.php,所以要在底下增加對(duì)應(yīng)目錄的重寫配置。