Javascript Jekyll静态页面的主干路由/历史问题
我正在用Jekyll建立一个简单的营销网站,并在幕后使用主干网的路由和历史来处理导航。我的站点的每个页面都是自己的HTML文件,我的策略是在页面之间的链接上启动Javascript Jekyll静态页面的主干路由/历史问题,javascript,.htaccess,backbone.js,history,jekyll,Javascript,.htaccess,Backbone.js,History,Jekyll,我正在用Jekyll建立一个简单的营销网站,并在幕后使用主干网的路由和历史来处理导航。我的站点的每个页面都是自己的HTML文件,我的策略是在页面之间的链接上启动preventDefault(),启动jQuery.get()以获取新的HTML,并用新页面中的信息替换我的div.content 我知道这种设置有点与众不同,但我有自己的理由:单页结构更可取,因为我希望对页面转换进行精确控制,并且我希望避免在用户每次导航到新页面时请求我的webfonts。保持HTML文件的静态和独立也是搜索引擎的一大优
preventDefault()
,启动jQuery.get()
以获取新的HTML,并用新页面中的信息替换我的div.content
我知道这种设置有点与众不同,但我有自己的理由:单页结构更可取,因为我希望对页面转换进行精确控制,并且我希望避免在用户每次导航到新页面时请求我的webfonts。保持HTML文件的静态和独立也是搜索引擎的一大优势
问题是:当我从我的根URL开始时,一切正常,但当我从另一个页面开始时,例如mydomain.com/page1
,历史就会中断。在初始化过程中,我的路由器试图将我路由到我已经在的页面,导致404:无法获取mydomain.com/page1/page1
。我可以用hackyisFirstLoad
boolean来防止这种情况,但这显然很糟糕,当我开始四处点击并使用后退按钮返回到/page1
时,它不会中断
我认识到一个解决方案是编写一些服务器端逻辑,为我的index.html
服务,而不管点击了哪个URL。然而,我不知道如何做到这一点,特别是对于本地环境。是关于PHP还是.htaccess?这就是我要做的吗?我是不是走错了路
谢谢 是的,一个解决方案是使用
index.html
为每个请求提供服务。但这有一个很大的缺点:你的网站不再被搜索引擎访问。为了保持静态站点的SEO优势,我建议你避开这个选项
我认为主干网已经提供了最佳解决方案。发件人:
如果服务器已经呈现了整个页面,并且您不希望在启动历史记录时触发初始路由,请传递silent:true
因此,首先确保路由器配置正确,所有路由与静态页面匹配,并实例化路由器
然后,像这样开始历史记录:
Backbone.history.start({pushState:true,silent:true,root:'/'})代码>
推送状态将有助于保持URL友好。Silent标志告诉主干网,您的静态服务器已经为页面提供了服务,并且它只是在事实发生后加载(您想要什么)。根目录配置确保主干网知道站点的真正根目录是什么(因此您不会得到page1/page1
废话)
根据我的经验,正确设置路由可能有点变化无常……祝你好运!非常感谢!知道我在这里没有完全出错,这让我很放心。你的回答基本上解决了我的问题-添加静默:true
在第一次加载时就解决了我的问题。尽管有了根配置,我仍然是ge当我点击离开第一页,然后点击后退按钮时,我遇到了/page1/page1
问题。很高兴我能提供帮助!你能发布引导应用程序(路由器和历史记录)的代码吗,无论是在这里的问题中还是在JSFIDLE中?进一步调查后,似乎这个问题可能与我的初始URL中的尾随斜杠有关。一旦我深入到我的历史中的一些路径,我就可以毫无问题地导航回/page1
,但一路返回到/page1/
将导致我的404 at/page1/page1
。