12

概述 :

我有一个使用的 AngularJS 应用程序,$locationProvider.html5Mode(true)它是从 Apache 服务器提供的。到目前为止,我使用的是可以从其他人那里访问的源代码,并且我只需要重定向到 index.html 来实现 angularJS 的 HTML5 模式。所以我有这个作为.htaccess/app文件夹的文件。

.htaccess:

<IfModule mod_rewrite.c>

    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]

</IfModule>

修改:

然后我添加了 Grunt 来缩小/dist在应用程序文件夹中生成的整个解决方案(所以现在缩小的解决方案位于 /app/dist)。我现在想将我的应用程序的全部流量路由到缩小版本,而不让用户更改链接。因此,在实践中,我想将每个呼叫从 /app 重定向到 /app/dist。

现在的目录结构:

app
    dist
        minified versions(css,html,js)

我尝试在 /app 的 .htaccess 中使用此处的一些条件,并将另一个 .htaccess 文件移动到 /app/dist 中,但没有成功。我什至不知道两者是否可以通过这种方式结合起来。我知道我可以将 dist 文件夹用作 /app ,但我真的不想要这个,因为 /app 是一个存储库,并且更容易保持更新。那么我怎样才能通过重定向来实现这一点呢?

另外,作为第二件事,是否可以以某种方式放置一个标志,以便让 alpha 用户使用普通(未缩小)版本进行更好的调试?

更新:

我在这里添加了一个示例项目。我只保留了上面显示的初始 .htaccess 文件,您可以检查两个版本(/test/test/dist)是否按上述方式工作。此外,它可能有一些未使用的代码和依赖项,但我只是从我的项目中删除了其他部分(不要判断:D)。

为此,我使用了 AngularJS 1.4.8 的初始配置,它可能会产生一些错误,例如此处此处所述的错误。随意将 AngularJS 版本更新到 1.5.8(Angular 1 的最后一个稳定版本),但也要考虑Cosmin Ababei 帖子上的评论。此外,该项目使用 npm 安装 grunt(以及 grunt 的其他扩展),使用 bower 安装 angular 和一些其他基本组件,并使用 grunt 构建缩小版本(实际上,它现在只是在相同文件中连接资源)。如果您需要更改依赖项,请不要忘记运行bower install. 如果要重新生成 dist 文件夹,不要忘记运行npm installand grunt build.

4

2 回答 2

1

我假设在/dist您拥有的目录中index.html包含更新的 URL,这些 URL 指向缩小的资源和正确的<base>标签。请注意,标签<base>必须指向/dist文件夹- 只需附加/dist到您用于未压缩 index.html文件的值,就可以了。

把这些东西整理好,下面是更新的.htaccess文件:

RewriteEngine On

# Don't rewrite files
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# If the ALPHA_USER cookie is set, serve the uncompressed files
RewriteCond %{HTTP_COOKIE} ALPHA_USER [NC]
RewriteRule ^ index.html [L]

# Rewrite everything
RewriteRule ^ dist/index.html [L]

你会注意到两件事:

  • 我已删除RewriteCond %{REQUEST_FILENAME} -d,因为您很可能不需要提供整个目录

  • 我添加了ALPHA_USER将用户重定向到未压缩文件的 cookie。此 cookie 可以具有您想要的任何值。

于 2016-08-30T04:01:25.263 回答
0

在 public_html =>/app =>.htaccess 里面试试这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ dist/index.html [L]

注意: HTML<base>标签应该指向 dist 文件夹。我希望这个解决方案能按照您的期望工作。

于 2016-08-31T13:14:00.947 回答