在Polymer中重新加载页面时遇到404错误

时间:2017-03-01 07:08:14

标签: javascript polymer

当我点击项目的每个链接并转到每个页面时它正在工作但我不知道为什么当我在聚合物中重新加载页面时出现404错误。请帮助我,我想要添加的内容。

这是我的app-location,app-route和iron-pages。

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

<iron-pages selected="[[page]]" attr-for-selected="name">
  <good-article name="article" route="{{subroute}}"></good-article>
  <good-detail name="detail" route="{{subroute}}"></good-detail>
  <good-login name="login" route="{{subroute}}"></good-login>
  <good-form name="form" route="{{subroute}}"></good-form>
  <good-list name="list" route="{{subroute}}"></good-list>
  <good-404 name="404"></good-404>
</iron-pages>

这是脚本标记。

<script>
Polymer({
  is: 'good-app',

  properties: {
    page: {
      type: String,
      reflectToAttribute: true,
      observer: '_pageChanged',
    },
  },

  observers: [
    '_routePageChanged(routeData.page)',
  ],

  _routePageChanged: function(page) {
    this.page = page || 'article';
  },

  _pageChanged: function(page) {
    // Load page import on demand. Show 404 page if fails
    var resolvedPageUrl = this.resolveUrl('good-' + page + '.html');
    this.importHref(resolvedPageUrl, null, this._showPage404, true);
  },

  _showPage404: function() {
    this.page = '404';
  },
});
</script>

2 个答案:

答案 0 :(得分:1)

这可能是由于服务器没有将所有网址重新路由到index.html文件。由于您的应用使用javascript管理路由,因此服务器在获取index.html以外的网址时不知道重定向的位置。因此,您应该配置您的服务器(我假设.htaccess,如果它是Apache服务器)将所有URL重新路由到index.html,以便应用程序可以处理它们。

答案 1 :(得分:1)

这是因为没有像URL中请求的那样的文件,处理这些路由的文件是包含JavaScript逻辑的文件,因此,所有URL都应该首先重定向到它。

将此.htaccess文件添加到您的文件夹中,并将index.html替换为您的索引名称(如果不同)。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.html [L]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>