具有Apache服务器的聚合物:URL和应用程序路由配置

时间:2017-04-17 14:19:10

标签: apache polymer

我制作了一个小型的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)运行应用程序用于测试目的,它一切正常,刷新和所有。

2 个答案:

答案 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>