使用基本URL在web服务器上托管Polymer应用程序

使用基本URL在web服务器上托管Polymer应用程序,polymer,polymer-1.0,relative-path,polymer-starter-kit,Polymer,Polymer 1.0,Relative Path,Polymer Starter Kit,如果我采取这种方法,在当地效果很好。 我可以导航到,并且指向3个视图的所有链接都可以正常工作 现在,如果我将此应用程序托管在web服务器(与其他应用程序共享)的URL上,例如,我在路由方面遇到了问题。有没有办法在相对URL中提及应用程序路径 我尝试对html文件进行更改,使其具有相对URL <link rel="import" href="./src/my-app.html"> <a name="view1" href="./view1">View One</a&g

如果我采取这种方法,在当地效果很好。 我可以导航到,并且指向3个视图的所有链接都可以正常工作

现在,如果我将此应用程序托管在web服务器(与其他应用程序共享)的URL上,例如,我在路由方面遇到了问题。有没有办法在相对URL中提及应用程序路径

我尝试对html文件进行更改,使其具有相对URL

<link rel="import" href="./src/my-app.html">
<a name="view1" href="./view1">View One</a>
<base href="/mywonderfulapp/">

但我似乎无法以类似的方式修复应用程序路由

这里的所有类似问题似乎都是关于Polymer的1.0之前版本,并提到page.js和hash-bang路由,而不是HTML5历史友好URL和应用程序路由组件

我更愿意进行最小的代码更改以确保

  • 同样的代码可以在本地和远程主机上工作
  • 该应用程序不依赖于它所在的基本URL,因此,最好不要在代码中的任何地方提到“mywonderfulapp”(来自上面的URL)

如评论中所述,在stackoverflow.com/questions/39608956/polymer-error-on-reload上的类似帖子中解决了这一问题‌​


firebase用户的旁注-如果您将此版本的starter kit部署到firebase并在CLI上提供firebase服务,此问题甚至会在本地主机上发生,因此您需要上述修复,即使在本地主机上也是如此。

到目前为止,我最接近的解决方法是:

在应用程序路由模式中提及URL前缀的占位符

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

这种方法的缺点是,即使在本地工作,我也必须使用URL,但至少在部署到远程web服务器时,我不必再修改代码。

我认为您遇到了这个问题:不,这是另一个问题。在这种情况下,需要服务器端路由将某些URL映射到index.html。这可能与您遇到的routing/page.js问题有关。谢谢Robert。该提交现在不相关,因为Polymer不再使用page.js进行路由。感谢您的回复。但是,正如你在回复你提到的评论时所说的,这不是同一个问题。在另一种情况下,404发生在用户试图直接转到特定URL时,这需要一些服务器端路由将请求的URL映射到index.html,以便Polymer可以在客户端进行路由。在我的例子中,我从主页开始,当我试图通过点击链接导航到其他视图时,由于html文件的路径错误,我得到了404。在我看来,应用程序路由和相关JS代码需要知道我的基本URL。将其标记为已接受的答案,直到出现更好的答案。
<a name="view1" href="/[[routeData.prefix]]/view1">View One</a>
<a name="view2" href="/[[routeData.prefix]]/view2">View Two</a>
<a name="view3" href="/[[routeData.prefix]]/view3">View Three</a>