我正在尝试使用AngularJS设置apache 2.2,其结构几乎与以下封闭问题的结构完全相同。
rewrite rules for apache 2 to use with angular js
我想将所有请求重定向到app / index.html,除了对/ api的请求。
我的目录结构如下
我正在尝试在httpd-vhosts文件中应用这些重定向规则,并将其作为正确答案https://stackoverflow.com/a/15284848/671095发布到问题中。
<VirtualHost *:80>
ServerName www.test.com
DocumentRoot "C:/websites/test"
Alias /CFIDE "C:/websites/CFIDE"
RewriteEngine On
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/api
# otherwise forward it to index.html
RewriteRule ^.*$ - [NC,L]
RewriteRule ^app/. /app/index.html [NC,L]
</VirtualHost>
然而,当我尝试访问/在浏览器中时,我看到一个空白屏幕。如果我在浏览器中输入/app/index.html但是我能够在浏览器中查看html页面,但是没有一个css.or js可以被访问并返回404.
我一直坚持这个,这似乎是一个简单的事情,作为一个apache重写。
非常感谢任何帮助
答案 0 :(得分:14)
现在使用FallbackResource指令在Apache 2.2.16+中更加容易。
FallbackResource /app/index.html
http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource
根据您转发API访问权限的方式,您可能还需要利用机箱来专门针对API请求禁用备用资源(2.2.24 +)。
<Directory /api>
FallbackResource disabled
</Directory>
答案 1 :(得分:11)
This适合我:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index
RewriteRule (.*) index.html [L]
</ifModule>
答案 2 :(得分:2)
我有同样的问题。但我在mod_rewrite
无知,所以不得不谷歌。
我在这封电子邮件中找到了解决方案:
https://groups.google.com/d/msg/angular/GmNiNVyvonk/mmffPbIcnRoJ
所以我认为您的.htaccess应如下所示:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/api
RewriteRule ^.*$ - [NC,L]
# otherwise forward it to index.html
RewriteRule ^app/(.*) /app/#/$1 [NC,L]
请注意(.*)
和#/$1
注意:您必须在包含CSS,JS等中使用绝对路径,否则您将收到错误:
资源解释为脚本但使用mime类型text / html
传输
答案 3 :(得分:1)
不知道你是否还有这个问题,但是我和AngularJS和Apache 2的症状相同。
我的问题实际上是我正在使用IE,它自动进入兼容模式。我在我的HTML中使用了下面这一行,它确实有效。
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
此处进一步描述:&lt; What does <meta http-equiv="X-UA-Compatible" content="IE=edge"> do?&gt;。