之前有使用過backbone開發一個網站
但是始終碰到一個問題
就是url一定要加一個hash symbol
使得url很醜並且也不利於seo
最近剛好有些時間,稍微研究一下
網路上剛好有一篇文章
照著操作已經可以解決大部分的問題
最後再加上加入一些nginx的設定
總於完全解決問題了~
以下是操作步驟:
SETP 1:
根據官方文件
加入以下參數
Backbone.history.start({ pushState: true })
接下來根據文章
要處理的就剩下內部連接跟外部連結
SETP 2:
處理內部連結,先將所有連結的domain去掉改成/
接下來加上一段jquery
$(document).on("click", "a[href^='/']", function(event) {
var href, passThrough, url;
href = $(event.currentTarget).attr('href');
passThrough = href.indexOf('sign_out') >= 0;
if (!passThrough && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
event.preventDefault();
url = href.replace(/^\//, '').replace('\#\!\/', '');
window.Router.__super__.navigate(url, { trigger: true });
return false;
}
});
簡單的解釋一下
目的就是要監聽所有click event
將href裡的開頭的/和#!清掉
最後用backebone navigate作導頁
SETP 3:
處理外部鏈結
加入以下code
window.App = {
Models: {}, Collections: {}, Views: {},
redirectHashBang: function() {
return window.location = window.location.hash.substring(2); }
};
$(function() {
if (window.location.hash.indexOf('!') > -1) {
return App.redirectHashBang();
}
});
目的是要引許#!的存在
會導到相對應的頁面
SETP 4:
文章下面還server端的設定
在此就不多加敘述
但是至此為止還是會有從外部直接進來的問題
這就必須動到web server 本例子是用nginx
設定方式很簡單,只要加上
location /你的route path {
proxy_pass http://yourdomain.com.tw/#!;
}
就可以輕易幫你做到了 希望對有碰到相同問題的人有幫助~