服务器端在Angular html5模式下更改

时间:2013-06-04 09:32:57

标签: html html5 angularjs

我想知道是否有人可以告诉我在Angular js中将模式更改为html5时需要完成哪些服务器端更改。因为当我试图将它改为html 5模式时,我无法进入我的内部html页面。在Angular API中,它表示suers也需要进行服务器端更改。

  1. 什么是服务器端更改
  2. 我们还需要做其他任何改变吗?

2 个答案:

答案 0 :(得分:0)

你应该区分两种类型的电话:

  1. 来自浏览器的HTML调用。这些应全部重新映射以满足您的索引或其他任何目的。
  2. JSON API请求。这些应该传递到您的应用服务器。
  3. 如何区分这两种类型的调用,以及如何重新映射前者,在很大程度上取决于您的设置。

    如果您正在使用nginx,例如,检查$ http_accept为application/json(请参阅http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requestshttp://wiki.nginx.org/HttpCoreModule#.24http_HEADER)并重写(http://wiki.nginx.org/HttpRewriteModule#rewrite),您可以实现你想要的。

答案 1 :(得分:0)

您需要设置服务器,将所有内容重写为index.html per https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode ...

<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>

我的应用程序将params传递给控制器​​(通过ui-router)所以在html5mode之前我会转到 www.blah.com/angapp/#/myUIrouterController?param_x=1&param_y=2 猜测浏览器知道/#/文件夹路径部分应该服务于index.html。

现在#将与html5mode一起消失,默认情况下,服务器不知道为该文件夹提供index.html,因为url只是: www.blah.com/angapp/myUIrouterController?param_x=1&param_y=2 myUIRouterController不是一个真正的文件,因此服务器只会提供404,因此为什么我认为需要重写因此它知道将所有内容发送到index.html(所以上面与&lt; base&gt;标签的组合应该工作..注意:requireBase是可选的,但听说它可以帮助像IE9这样的老浏览器。