首页 文章

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

提问于
浏览
1

我做了一个小型的Polymer移动应用程序 . 我将build / bundled文件夹(部署文件)复制到具有Ubuntu和apache2的机器上 .

根是通常的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

    就像我怀疑的那样,我不得不将每个请求(除了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>
    
  • 2

    如果你使用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>
    

相关问题