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