1
我正在構建一個SPA,它使用nginx作爲Web服務器提供靜態文件。我需要一種方法來服務於根index.html文件部分航線:如何配置nginx爲靜態文件和index.html提供單頁應用的其他所有內容
- /溫泉/路由
- /otheroute/
- /測試
- /其它/一個/
但仍允許提供靜態文件。
我已經嘗試了很多方法,但都沒有做到這一點。
我正在構建一個SPA,它使用nginx作爲Web服務器提供靜態文件。我需要一種方法來服務於根index.html文件部分航線:如何配置nginx爲靜態文件和index.html提供單頁應用的其他所有內容
但仍允許提供靜態文件。
我已經嘗試了很多方法,但都沒有做到這一點。
你應該有一個nginx.conf
像這樣(我已經採取了這一從我的舊角項目之一):
server {
## Your website name goes here.
server_name example.com;
## Your only path reference.
root /var/www/example.com/public_html;
## This should be in your http block and if it is, it's not needed here.
index index.html;
autoindex off;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location/{
if (!-e $request_filename){
rewrite ^(.*)$ /index.html break;
}
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
第一和第二location
規則是不需要任何共同文件特別檢查並經常請求機器人和瀏覽器。
第三條規則說如果請求的文件(相對url)不存在,index.html
將被提供。這個文件是你的SPA的主要文件。如果此規則與請求匹配,則關鍵字break
將停止進程。
最後一個規則說,如果被請求的文件,JS,CSS,PNG,...(你的靜態資產)結束,這將是服務器如,沒有任何重寫。 通過這種方式,您可以在任何目錄中擁有您的資產而不會產生麻煩。
P.s.
我用這也用於$locationProvider.html5Mode(true);
在我的角應用程序有真實的網址,其作品很好。
謝謝您的詳細解答。這適用於像/ foo和/ user這樣的路由,但不適用於較長的路由,例如/ foo/bar。你知道這可能是爲什麼嗎? – Derek
你有什麼類型的錯誤? – lifeisfoo
問題原來是試圖加載一些文件與相對URL的前端,導致他們加載index.html一些路線! – Derek