概述:
我有一个使用$locationProvider.html5Mode(true)
的AngularJS应用程序,它是从Apache服务器提供的。 到目前为止,我使用源代码从其他人访问,我只需要redirect到index.html的angularJS的HTML5模式。 所以我有这个为我的/app
文件夹的.htaccess
文件。
.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
文件夹中生成的整个解决scheme(所以现在缩小的解决scheme在/ app / dist中)。 我现在想将我的应用程序的整个stream量路由到缩小版本,而不会让用户更改链接。 所以,在实践中,我想将每个来自/ app的调用redirect到/ app / dist。
目录结构现在:
app dist minified versions(css,html,js)
我尝试在/ app的.htaccess中使用这里的一些条件,并移动/ app / dist中的其他.htaccess文件,但没有成功。 我甚至不知道这两者是否可以这样结合。 我知道我可以使用dist文件夹作为/应用程序,但我不会真的想这样做,因为/ app是一个回购,它更容易保持更新。 那么我怎样才能实现这个redirect呢?
此外,作为第二件事情,是否有可能把一个标志不知何故,我让阿尔法用户使用正常(未缩小)的版本更好的debugging?
更新:
我在这里添加了一个示例项目。 我只保留了上面显示的初始.htaccess文件,您可以检查两个版本( /test
和/test/dist
)是否如上所述工作。 此外,它可能有一些未使用的代码和依赖项,但我只是从我的项目中删除其他部分(不要判断:D)。
为此,我使用了AngularJS 1.4.8的初始configuration,可能会产生一些像这里和这里所述的错误。 随意将AngularJS版本更新到1.5.8(Angular 1的最后一个稳定版本),但同时考虑到Cosmin Ababei的post上的评论。 另外,该项目使用npm来安装grunt(以及其他的grunt扩展),bower for angular和其他一些基本组件,以及用于构build缩小版本的grunt(实际上,它现在只是将资源连接在相同的文件中)。 如果您需要更改依赖项,请不要忘记运行bower install
。 如果你想重新生成dist文件夹,不要忘记运行npm install
和grunt build
。
我将假定在/dist
目录里有index.html
,并且更新的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可以有你想要的任何价值。
在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文件夹。 我希望这个解决方案能按照你的期望工作。