2016-08-15 102 views
0

我想路線如下方式使用nginx的我的請求nginx的位置塊匹配的網址

site.com/admin -> admin/index.html 
        admin/js/assets.js // the route locations have individual assets 
site.com/112dw -> dist/index.html // alphanumeric regex 
        dist/css/assets.css 

我有以下nginx的配置

server { 
    listen 80 
    root /usr/share/nginx/html; 
    location /admin { 
     //alias /usr/share/nginx/html/admin/; 
     try_files $uri /admin/index.html; // changed based on answer below 
    } 
    location ~* /[a-zA-Z0-9].*$ { // rest of the routes 
     add_header 'Access-Control-Allow-Origin' '*'; 
     //alias /usr/share/nginx/html/dist/; 
     try_files $uri /dist/index.html; 
    } 
} 

後,我改變了我的配置使用try_files ,因爲HTML正在搜索上面的路徑一個目錄,所以我的靜態資源沒有被提供。任何人都可以指出我正確地設置了這個嗎?

回答

0

最簡單的方式來完成,這是通過使用try_files

root /usr/share/nginx/html; 

location =/admin { 
    try_files /admin/index.html =404; 
} 
location ~*^/[a-z0-9]+$ { 
    try_files /dist/index.html =404; 
} 
+0

我的靜態文件沒有與此方法一起提供。 html正在搜索html/js而不是html/dist/js –

+0

這是否需要我爲靜態文件分別配置所有文件夾? html請求被髮送時沒有dist請求,所以所有的js請求都失敗了。我很抱歉,如果這是一個noob問題..我是nginx的新手,並試圖弄清楚配置。 –

+0

@PavanK您的問題中沒有「js」請求,並且上面的配置僅寫入以提供您提供的這兩種類型的請求。你應該用完整的需求列表來更新你的問題。 – VBart

0

您可以使用indextry_filesrewrite指令以指向請求index.html

您不需要使用正則表達式位置作爲默認值。事實上,您在問題中定義的方式,從未諮詢/admin的位置。

您應該使用root而不是alias(請參閱this document)。

有許多解決方案,可能取決於您的資源文件應如何解決。類似這種模式可能適用於您的:

root /usr/share/nginx/html/dist; 

location/{ 
    try_files $uri /index.html; 
} 
location /admin { 
    root /usr/share/nginx/html; 
    try_files $uri /admin/index.html; 
} 
+0

我的靜態文件是沒有使用這種方法。 html正在搜索html/js而不是html/dist/js –