2014-03-24 127 views
0

我使用PHP MVC Codeigniter作为后端和BackboneJS作为我的应用程序的前端。我使用pushState:true-功能,并将以下代码添加到我的根index.php,以便在尝试重新加载URL或将URL发送给其他用户时,我的页面返回有效的URL。Codeigniter + BackboneJS路由问题

$url = preg_replace('/^myproject\//', '', ltrim($_SERVER['QUERY_STRING'], '/')); 

$urlPatterns = array (
'home', 
'nyheder', 
'artists' , 
'artists\/[a-zA-Z]', 
'releases', 
'live', 
'videoes' , 
'competitions' , 
'remix' , 
'[0-9]+' , 
'[0-9]+\/videos', 
'[0-9]+\/releases' 
); 

if(!(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')) { 
foreach ($urlPatterns as $pattern) { 
    $pattern = "/^{$pattern}$/"; 
    if (preg_match($pattern, $url)) { 
     readfile('application/views/home.php'); die(); 
    } 
    } 
} 

到目前为止,它的工作原理,但只要我点击右键,“在新标签中打开”,它会自动添加一个#hashtag,我想避免完全。有没有人知道问题出在这里?

在此先感谢...

+0

也许您已将“#”添加到您在hrefs中添加的网址中? Backbone不会为视图组件(例如按钮)生成URL。 –

+0

好吧,我删除了“#”,是的,现在它已经没了,但现在我得到404错误... – SHT

+0

然后你的服务器没有正确管理URL路由(假设你还没有定义404错误的骨干路由)。 –

回答

0

我自己解决了这个问题!

除了设置pushState:true的我加入了根文件夹到我的<a href>标签都有效,所以如果例如URL为http://yoursite.dk/project - 链接在你的HTML必须是<a href="/project/(the target)"

这使得它的工作!