Angular删除了网址中的#标签。但没有按预期工作

时间:2015-05-07 10:04:41

标签: javascript angularjs

我刚从我的角度单页应用的网址中删除了#tag。

我确实喜欢。

$locationProvider.html5Mode(true);

它运作良好。

我的问题是当我直接在浏览器中输入任何URL时显示404错误。当我通过链接遍历应用程序时,它的工作正常。

Eg: www.example.com/search  
    www.example.com/search_result
    www.example.com/project_detail?pid=19

所有这些网址都运行良好。但是当我直接在我的浏览器中输入上述任何一个url时,它会显示404错误。

请关注它。 提前致谢。

3 个答案:

答案 0 :(得分:0)

我有类似的问题。在我的案例中,服务器端实现包括Spring。

客户端路由确保在客户端解析所有网址更改。但是,当您在浏览器中直接输入任何此类网址时,浏览器实际上会转到服务器以检索与该网址对应的网页。

现在在你的情况下,由于这些是虚拟网址,这在客户端是有意义的,服务器会抛出404.

  

您可以在服务器端捕获页面未找到的异常   实现,并重定向到您应用中的默认页面[route]。

     

在Spring中,我们确实有找不到页面异常的处理程序,所以我   猜测它们也可用于你的服务器端实现。

答案 1 :(得分:0)

使用历史记录API时,您会说:

"这是一个新网址。我刚刚运行的其他JavaScript已经将页面转换为访问该URL所能获得的页面。"

这要求您编写服务器端代码,以便为其他网址构建该状态的网页这不是一件容易的事情。通常需要大量的工作。

但是,为了换取这项工作,您将获得健壮性效果。当访问其中一个URL时,它将:

  • 即使JS因任何原因失败(例如网络连接中断或客户端(如搜索引擎)不支持JS)
  • 加载比加载主页更快,然后用JS
  • 转换它

答案 2 :(得分:-1)

您需要使用重写规则。 Angular是一个单页面应用程序,因此您的所有请求都应该转到同一个文件(index.html)。您可以通过创建.htaccess来完成此操作。

假设您的主页是index.html。

像这样(未经测试):

RewriteRule ^(.)*$ / [L,QSA]

L标志表示如果规则匹配,则不要执行下一个RewriteRule。

QSA表示URL查询参数也与重写的URL一起传递。

有关htaccess的更多信息:http://httpd.apache.org/docs/2.2/howto/htaccess.html