2017-04-17 76 views
1

我製作了一個小型Polymer應用程序。我將構建/捆綁文件夾(部署文件)複製到使用Ubuntu和apache2的計算機上。具有Apache服務器的聚合物:URL和應用程序路由配置

根是通常的var/www/html。有一個index.html文件,然後是帶有Polymer構建的所有其他接口(htmls)的/ src文件夾。

對目錄安全模型:

<Directory /var/www/> 
    Options FollowSymLinks 
    AllowOverride None 
    Require all granted 
</Directory> 

聚合物,我配置了APP-路線上大部分的網頁,這樣的:

<app-location route="{{route}}"></app-location> 
<app-route 
    route="{{route}}" 
    pattern="/:page" 
    data="{{routeData}}" 
    tail="{{subroute}}"></app-route> 

而且某些頁面都是這樣的:

<app-route route="{{route}}" 
      pattern="/:recordid" 
      data="{{routeData}}"></app-route> 

這是一個基本的聚合物頁面路由,尋找要顯示的頁面名稱。所以用它來導航看起來像這樣:

domain.com 
domain.com/vehicles 
domain.com/vehicles/id_of_the_vehicle 
domain.com/customers 

除了第一個(的index.html),所有其他網頁都在/ src文件夾。

這一切都工作正常,直到我刷新頁面之一。例如,Chrome上的「下拉到刷新」功能會自動刷新頁面。例如,當刷新發生時,服務器嘗試查找'/ vehicles'文件,並且它將顯示404錯誤,因爲根文件夾中沒有這樣的文件。這是在聚合物的應用程序路由組件上使用的路線,以指示要尋找哪個文件...

所以我想我需要把每個請求視爲'index.html',因爲這個文件指向另一個文件my-app.html),它具有所有的應用程序路由配置...客戶端應該處理所有的路由。這是正確的,但?我怎樣才能做到這一點?我應該嘗試從Node.js Express作爲Web服務器而不是Apache?

如果我用本地聚合物服務器(聚合物服務--params)運行應用程序用於測試目的,它一切正常,刷新和所有。

回答

1

正如我懷疑,我不得不去對待每一個請求(除了根「/」)作爲index.html的

所以在根文件夾一個簡單的.htaccess解決它:

<IfModule mod_rewrite.c> 
     Options +FollowSymLinks 
     IndexIgnore */* 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule (.*) index.html 
</IfModule> 
+0

感謝分享 –

+0

謝謝,我嘗試過,但得到這個錯誤: 國米最終服務器錯誤 服務器遇到內部錯誤或配置錯誤,無法完成您的請求。 請聯繫服務器管理員,告知他們發生錯誤的時間以及您在此錯誤出現之前執行的操作。 有關此錯誤的更多信息可能在服務器錯誤日誌中可用。 –

0

如果使用虛擬主機找你就可以是你有文檔根這樣的前綴您的重寫條件:

<ifModule mod_rewrite.c> 
    # debug with apache since 2.4 mod_rewrite 
    # LogLevel alert rewrite:trace6 

    Options +FollowSymLinks 
    IndexIgnore */* 
    RewriteEngine On 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f 
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
    # last rule, append query string 
    RewriteRule (.*) /index.html [L,QSA] 
</ifModule>