Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jekyll静态页面的主干路由/历史问题_Javascript_.htaccess_Backbone.js_History_Jekyll - Fatal编程技术网

Javascript Jekyll静态页面的主干路由/历史问题

Javascript Jekyll静态页面的主干路由/历史问题,javascript,.htaccess,backbone.js,history,jekyll,Javascript,.htaccess,Backbone.js,History,Jekyll,我正在用Jekyll建立一个简单的营销网站,并在幕后使用主干网的路由和历史来处理导航。我的站点的每个页面都是自己的HTML文件,我的策略是在页面之间的链接上启动preventDefault(),启动jQuery.get()以获取新的HTML,并用新页面中的信息替换我的div.content 我知道这种设置有点与众不同,但我有自己的理由:单页结构更可取,因为我希望对页面转换进行精确控制,并且我希望避免在用户每次导航到新页面时请求我的webfonts。保持HTML文件的静态和独立也是搜索引擎的一大优

我正在用Jekyll建立一个简单的营销网站,并在幕后使用主干网的路由和历史来处理导航。我的站点的每个页面都是自己的HTML文件,我的策略是在页面之间的链接上启动
preventDefault()
,启动
jQuery.get()
以获取新的HTML,并用新页面中的信息替换我的
div.content

我知道这种设置有点与众不同,但我有自己的理由:单页结构更可取,因为我希望对页面转换进行精确控制,并且我希望避免在用户每次导航到新页面时请求我的webfonts。保持HTML文件的静态和独立也是搜索引擎的一大优势

问题是:当我从我的根URL开始时,一切正常,但当我从另一个页面开始时,例如
mydomain.com/page1
,历史就会中断。在初始化过程中,我的路由器试图将我路由到我已经在的页面,导致404:
无法获取mydomain.com/page1/page1
。我可以用hacky
isFirstLoad
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