我想知道是否有人可以告诉我在Angular js中将模式更改为html5时需要完成哪些服务器端更改。因为当我试图将它改为html 5模式时,我无法进入我的内部html页面。在Angular API中,它表示suers也需要进行服务器端更改。
答案 0 :(得分:0)
你应该区分两种类型的电话:
如何区分这两种类型的调用,以及如何重新映射前者,在很大程度上取决于您的设置。
如果您正在使用nginx,例如,检查$ http_accept为application/json
(请参阅http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requests和http://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¶m_y=2 猜测浏览器知道/#/文件夹路径部分应该服务于index.html。
现在#将与html5mode一起消失,默认情况下,服务器不知道为该文件夹提供index.html,因为url只是: www.blah.com/angapp/myUIrouterController?param_x=1¶m_y=2 myUIRouterController不是一个真正的文件,因此服务器只会提供404,因此为什么我认为需要重写因此它知道将所有内容发送到index.html(所以上面与&lt; base&gt;标签的组合应该工作..注意:requireBase是可选的,但听说它可以帮助像IE9这样的老浏览器。