在上線vue開發的前端網頁上線後,刷新頁面報404錯誤,由於網頁上顯示的是靜態絕對路徑,實際上服務器上是沒有改路徑的因此刷新彙報錯誤。php
一、vue框架中解決404html
vue router mode 默認爲hsas, 這樣的url中帶有#,若是把mode: 'history'就能去掉#號,也能夠正常訪問,可是再次刷新頁面就會出現404錯誤。前端
const router = new Router({
mode: 'history'
});
url中帶有#,讓有強迫症的人很不爽,能夠去掉,去掉後就須要改nginx配置文件了。vue
二、修改nginx配置文件nginx
location / { root ... index ... try_files $uri $uri/ /index.html; ---解決頁面刷新404問題 }
將上面代碼放入nginx配置文件中 服務器
保存退出框架
. ./nginx -t -- 驗證nginx配置文件是否正確
. ./nginx -s reload -- 重啓nginx
記得修改完nginx配置文件必定要重啓nginx 否則沒有效果!!!post
location / { root /var/www/build; index index.html index.htm; try_files $uri $uri/ @rewrites; } location @rewrites { rewrite ^(.+)$ /index.html last; }
server { listen 80; server_name localhost; root html/; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$args; proxy_pass http://www.baidu.com; } location ~ \.(html|htm)$ { try_files $uri = 404; } location ~ \.php$ { try_files $uri = 404; include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } }
try_files網站
這個東西是重定向用的,我感受和index 差很少,不過確實比index 要好用ui
舉個例子:
訪問:xf.com/aa
若是咱們這麼設置,對於這一句的理解是。
try_files $uri $uri/ /index.php?$args;
當nginx 收到你的xf.com/aa ,那麼會匹配到
location / {
try_files $uri $uri/ /index.php?$args;
proxy_pass http://www.baidu.com;
}
這裏多說一嘴,若是沒有合適的匹配,那麼就會找index的值。
index.html inde.htm index.php
當找到相對應的文件,就會把你的訪問url變成。
xf.com/index.html或者xf.com/index.htm xf.com/index.php 其中一個
這回你明白index了吧
回來咱們再說 try_files
當匹配到這項的時候,就開始執行try_files
nginx 回去找有沒有 aa這個文件($uri) 若是沒有
繼續找aa這個目錄($uri/) 若是也沒有的話就直接
重定向到 /index.php?$args
$args 就是你的url 問號後邊的參數