我在Mac上使用MAMP设置了本地版本的AngularJS。我使用locationProvider启用了HTML5模式,以便网址中不再包含#。
要做到这一点,虽然我添加了:
<base href="http://localhost:8888/AngularJS/app/">
到index.html
页面的顶部。
这可以解决问题......但是,如果浏览器中的网址完全匹配(例如正确的大小写和正确的尾部斜杠)。否则,它会将您重定向到localhost:8888的服务器根目录,但STILL会显示AngularJS应用程序,因此它的客户端历史记录更改而不是实际的服务器重定向。
我觉得我做错了什么......有没有更好的办法让这个工作?
答案 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>