AngularJS - 去除Hashbang后页面重新加载出现404错误

3

使用此方法从我的路由中删除哈希

$locationProvider.html5Mode(true);

现在,当访问一个页面时,例如“domain.com/download”,它能正常工作。但是如果重新加载此页面,将会出现404错误。像“domain.com/download”这样的链接只能通过键入“domain.com/#!/download”才能打开。一旦加载完成,它会重新定向到正常的“domain.com/download”页面。
我正在使用v1.3.2进行路由和v1.6.3处理其他事项(不要问我为什么没有自己制作这个网站)。

2
你需要配置你的路由(在.htaccess文件中)。 - Aleksey Solovey
这是通常的吗?因为我不需要这样做就可以让哈希斑本身工作。 - Konstantin Schlegel
是的,这很常见,因为你需要这样做才能使没有哈希符号的URL正常工作。(实际上,你的Angular应用程序位于路径“ / ”;当确定路径时,URL的哈希部分被忽略,因此“ /#!/whatever ”仍然指向“ / ”。“/download”默认情况下指向不同的路径,而不是你的应用程序;因此,你需要重新配置你的Web服务器,将所有URL指向相同的路径,从那里Angular可以弄清楚该怎么处理它。) - Daniel Beck
1个回答

2
这是AngularJS文档中的说明:

使用此模式需要在服务器端进行URL重写,基本上您需要将所有链接重写为应用程序的入口点(例如index.html)。在这种情况下,要求使用<base>标签也很重要,因为它允许AngularJS区分url中是应用程序基础部分还是应用程序处理的路径。

您需要将.htaccess 更改为以下内容:

RewriteEngine On 
Options FollowSymLinks

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /#/$1 [L]

1
(此答案假设他们正在使用Apache作为Web服务器;其他Web服务器将需要不同的配置。请注意.htaccess文件中的小错误拼写。) - Daniel Beck
修正了拼写错误。是的,这假定了Apache,但你可以很容易地查找其他配置所需的内容。 - Kyle Krzeski
1
这个有效,谢谢。 - Konstantin Schlegel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接