2

我在 AngularJS 中有一个应用程序,我需要将 html5mode 设置为 true 以便/#/从 URL 中删除哈希。dist在文件夹中可以找到缩小版的应用程序。

问题:我的目标是重写dist文件夹的流量并允许启用 html5mode。有人可以帮忙吗?

<base href="/" />我可以通过设置和添加$locationProvider.html5Mode(true);到应用程序配置和 ui-router 文件的底部来让 html5mode 工作 。

所有这些都适用于通过 Gulp 使用 NodeJS 的开发模式。当我将应用程序移动到 Apache 上的其他环境时,设置出现问题。

问题是:

A. 该应用程序无法加载任何资产,因为它正在服务器根目录中查找它们。

B. 应用程序无法重新加载并登陆请求的 URL。它给出了 404 错误。

如果没有在应用程序中启用 html5mode,我正在使用这个 htaccess 重定向到dist文件夹并且它工作正常。

# This first part is not relevant for the question but is included for practical purposes. It rewrites traffic to HTTPS
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(app\.)?example\.com$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]

Options +FollowSymLinks
RewriteCond %{REQUEST_URI} !(.*)dist
RewriteRule ^(.*)$ dist/$1 [L]

它需要在不同的环境中工作相同,以便我可以在本地和其他环境中使用它。在本地它会打开localhost/project_name/app/webapp/(dist),而在其他环境中它会打开https://app.example.com/(dist)

我也尝试过设置<base href="/dist/" />,但它也不起作用。它只会将dist文件夹添加到资产路径,并且在开发中也无法使用,因为应用程序不会从dist.

基本上这些零件都可以工作,但是放在一起就失败了。

我已经经历了许多 SO 答案,但都没有成功:

在 html5mode(true) 视图中没有加载 Angular js 中的页面刷新

AngularJS + html5Mode + 自定义后备

apache上带有html5mode(true)的angularjs ngroute失败

AngularJS:html5Mode(true) 导致 404 错误

4

1 回答 1

0

如果你有 Apache2,不要为重写规则而苦苦挣扎,而是定义一个fallbackresource

.htaccess 文件中的这两行代码将解决您的问题:

FallbackResource /index.php
DirectoryIndex index.html

第二行是必要的,因为只有谷歌浏览器。

要了解有关后备资源的更多信息,请参阅此处的 Apache 文档

于 2017-02-28T10:25:33.313 回答