设置AngularJS HTML5路由

时间:2014-05-13 11:37:14

标签: html5 angularjs

我在Mac上使用MAMP设置了本地版本的AngularJS。我使用locationProvider启用了HTML5模式,以便网址中不再包含#。

要做到这一点,虽然我添加了:

<base href="http://localhost:8888/AngularJS/app/">

index.html页面的顶部。

这可以解决问题......但是,如果浏览器中的网址完全匹配(例如正确的大小写和正确的尾部斜杠)。否则,它会将您重定向到localhost:8888的服务器根目录,但STILL会显示AngularJS应用程序,因此它的客户端历史记录更改而不是实际的服务器重定向。

我觉得我做错了什么......有没有更好的办法让这个工作?

2 个答案:

答案 0 :(得分:0)

如果您可以共享角度模块配置文件以确切了解路由的设置方式,将会有所帮助。

我建议您将基本代码设置为相对于域名,这样可以使环境免费,更安全地部署到新的环境<base href="/AngularJS/app/">

应将服务器配置为正常处理脱离所需路径的路由。这意味着如果您访问http://localhost:8888/AngularJS/ZZZ,它可能应该重定向到404 Page Not Found(毕竟,这是一条不好的路线,对吗?)。

最后,为了支持使用Angular的HTML5模式深入链接到您的应用,您的服务器应该捕获比/AngularJS/app/更深的所有url globs并为它们添加哈希前缀,从而允许您的服务器路由不到中断,并将哈希值传递给Angular。

具体而言,如果您有HTML5路由,例如/AngularJS/app/login/AngularJS/app/page/1,并且用户将/AngularJS/app/page/1输入浏览器,则可以将服务器重定向到/AngularJS/app/#/page/1哪个Angular会识别哈希并将其转换为HTML5路由(从而支持深度链接,并假设它是在Angular中正确配置的路由)。

我在HTML5应用程序中做了这件事,但我们的Angular路由器中也有[多个]动态slu,所以我们的服务器配置为不符合有效路线的场景,以及深度场景链接超过HTML5应用的基本路线。

关于尾随斜杠问题,你可能必须从它的声音中找到一个带有.htaccess的解决方案(可能是在缺席时强制它)。

答案 1 :(得分:0)

使用以下虚拟主机文件:

<VirtualHost *:80>
    ServerName my-app

    DocumentRoot /path/to/app

    <Directory /path/to/app>
        RewriteEngine on

        # Don't rewrite files or directories
        RewriteCond %{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^ - [L]

        # Rewrite everything else to index.html to allow html5 state links
        RewriteRule ^ index.html [L]
    </Directory>
</VirtualHost>