AngularJS - 删除Hashbang后页面重新加载时出现404错误[重复]
Posted
技术标签:
【中文标题】AngularJS - 删除Hashbang后页面重新加载时出现404错误[重复]【英文标题】:AngularJS - 404 error on page reload after Hashbang removal [duplicate] 【发布时间】:2019-01-22 11:26:05 【问题描述】:使用
从我的路由中删除 hashbang 后$locationProvider.html5Mode(true);
现在当访问一个页面时,例如“domain.com/download”,它就可以工作了。但是如果我重新加载这个确切的页面,它会给我一个 404 错误。像“domain.com/download”这样的链接只能通过输入“domain.com/#!/download”来打开。一旦加载,它会再次将我重定向到正常的“domain.com/download”页面。
我使用 v1.3.2 进行路由,而 v1.6.3 用于其余的(不要问我为什么我没有制作这个网站,哈哈)。
【问题讨论】:
你需要配置你的路由(在.htaccess
)
这很常见吗?因为我不必这样做来让 hashbangs 自己工作。
是的,这很常见,因为您需要这样做才能使网址没有井井有条。 (您的 Angular 应用程序实际上位于路径“/”;确定路径时忽略 URL 的哈希部分,因此“/#!/whatever”仍然指向“/”。“/download”指向不同的路径,默认情况下,这不是您的应用程序;因此您需要重新配置您的网络服务器以将所有 url 指向同一路径,Angular 可以从那里找出如何处理它。)
【参考方案1】:
AngularJS Documentation 是这么说的:
使用这种模式需要在服务器端重写 URL,基本上你 必须重写所有指向应用程序入口点的链接 (例如 index.html)。要求标签对此也很重要 案例,因为它允许 AngularJS 区分 作为应用程序基础的 url 和应处理的路径 由应用程序。
您必须将您的 .htaccess
更改为:
RewriteEngine On
Options FollowSymLinks
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /#/$1 [L]
【讨论】:
(此答案假设他们使用 apache 作为网络服务器;其他网络服务器将需要不同的配置。还要注意.htaccess
上的小错字)
修正了错字。是的,这假设 apache 虽然您可以很容易地查找其他配置所需的内容。
这行得通,谢谢。以上是关于AngularJS - 删除Hashbang后页面重新加载时出现404错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk:从 SPA 中删除 hashbang url
包含 <meta name="fragment" content="!"> 对带有 hashbang 的页面有害吗?
用于 hashbang 导航的 jQuery Mobile 和“查询参数”