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

我应该使用 hashbang/shebang 吗?

包含 <meta name="fragment" content="!"> 对带有 hashbang 的页面有害吗?

用于 hashbang 导航的 jQuery Mobile 和“查询参数”

AngularJS Minfication 错误与 $provide.decorator

AngularJS SPA路由获取URL为“/#!”而不是“#”[重复]