我制作了一个小型的Polymer移动应用程序。我将build / bundled文件夹(部署文件)复制到具有Ubuntu和apache2的计算机上。
root是通常的var / www / html。有一个index.html文件,然后是一个/ src文件夹,其中所有其他接口(htmls)都是用Polymer构建的。
目录的安全模型:
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
在Polymer上,我在大多数页面上配置了app-route,如下所示:
<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>
这是与Polymer一起使用的基本页面路由,查找要显示的页面的名称。所以使用它的导航看起来像这样:
domain.com
domain.com/vehicles
domain.com/vehicles/id_of_the_vehicle
domain.com/customers
除了第一个(index.html)之外,所有其他页面都在/ src文件夹中。
一切正常,直到刷新其中一个页面。例如,Chrome上的“下拉到刷新”功能会自动刷新页面。例如,当刷新发生时,服务器会尝试查找“/ vehicles”文件,并显示404错误,因为根文件夹中没有此类文件。这是在Polymer的app-route组件上使用的路由,用于指示要查找的文件...
所以我想我需要将每个请求视为'index.html',因为此文件指向另一个具有所有app-route配置的文件(my-app.html)...客户端应该处理所有路线。这是正确的吗?我怎样才能做到这一点?我应该尝试使用Node.js中的Express作为Web服务器而不是apache吗?
如果我使用本地聚合物服务器(聚合物服务--params)运行应用程序用于测试目的,它一切正常,刷新和所有。
答案 0 :(得分:3)
就像我怀疑的那样,我必须将每个请求(除了root'/')视为index.html
因此根文件夹上的简单.htaccess解决了它:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.html
</IfModule>
答案 1 :(得分:0)
如果你使用vhosts,那么你必须在重写条件前加上文档根,如下所示:
<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>