vue-router/react-router使用History模式的nginx配置

vue-router 或者 react-router 路由模式有兩種,一種是使用hash來(lái)控制視圖的跳轉(zhuǎn)。另一種是使用 history 模式,使用 history.pushState API 來(lái)控制視圖的跳轉(zhuǎn)。使用 hash 的缺點(diǎn)是路由的樣子會(huì)是 #/a/b 這種樣子,而且在微信分享時(shí)會(huì)出現(xiàn)問(wèn)題。所以推薦使用history模式的路由。

使用history模式的服務(wù)端支持

由于使用history時(shí)的路由是 www.xxx.com/a/b/c ,url 是指向真實(shí) url 的資源路徑。因此回去服務(wù)端查詢(xún)?cè)撡Y源。往往資源是不存在的于是就會(huì)報(bào)404。下面以 ngixn 為例修改 nginx 配置以支持history路由。

nginx 整體配置

原始配置

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location ~ ^/api {
        proxy_pass http://xxx.com:3000;
    }
    location / {
        root /xxx/dist;
        index  index.html index.htm;
    }

修改后的配置

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location ~ ^/api {
        proxy_pass http://xxx.com:3000;
    }
    location / {
        root /xxx/dist;
        index  index.html index.htm;
        try_files $uri $uri/ @rewrites;    
    }
    location @rewrites {
         rewrite ^(.+)$ /index.html last;
    }

配置詳解

由修改看出nginx此次修改,主要增加了

    location / {
        try_files $uri $uri/ @rewrites;    
    }

try_files 是指當(dāng)用戶(hù)請(qǐng)求url資源時(shí) www.xxx.com/xxx,try_files 會(huì)到硬盤(pán)資源根目錄里找 xxx。如果存在名為 xxx 的文件就返回,如果找不到在找名為 xxx 的目錄,再找不到就會(huì)執(zhí)行@rewrites。($uri指找文件, $uri/指找目錄)

    location @rewrites {
         rewrite ^(.+)$ /index.html last;
    }

rewrite是nginx中的重定向指令。^(.+)$ 是重定向規(guī)則。/index.html重定向路徑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評(píng)論 19 139
  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒(méi)有聽(tīng)過(guò)Nginx?那么一定聽(tīng)過(guò)它的“同行”Apache吧!Ngi...
    JokerW閱讀 33,019評(píng)論 24 1,002
  • github地址,歡迎大家提交更新。 express() express()用來(lái)創(chuàng)建一個(gè)Express的程序。ex...
    Programmer客棧閱讀 2,827評(píng)論 0 1
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 100,677評(píng)論 9 468
  • 最近想達(dá)成的目標(biāo)是:和家人擁有和諧的關(guān)系,希望擁有更多的財(cái)富 一、今天課程結(jié)束回家時(shí),有一位深圳的同學(xué)請(qǐng)求一起回家...
    毓晴閱讀 158評(píng)論 0 0

友情鏈接更多精彩內(nèi)容