6

我正在尝试使用 AngularJS 设置 apache 2.2,其结构与以下封闭问题中的结构几乎完全相同。

重写 apache 2 的规则以与 angular js 一起使用

我想将所有请求重定向到 app/index.html,但对 /api 的请求除外。

我的目录结构如下

  • /
  • /应用程序
  • /app/index.html
  • /应用程序/css
  • /app/js
  • /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 重写。

任何帮助将非常感激

4

4 回答 4

14

现在在 Apache 2.2.16+ 中使用 FallbackResource 指令要容易得多。

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> 
于 2013-05-04T05:35:36.010 回答
11

对我有用:

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteRule (.*) index.html [L]
</ifModule>
于 2013-05-11T07:30:30.453 回答
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 传输

于 2013-03-14T17:16:18.783 回答
1

不知道您是否仍然遇到此问题,但我在使用 AngularJS 和 Apache 2 时遇到了相同的症状。

我的问题实际上是我使用的是 IE,它会自动以兼容模式出现。我在我的 HTML 中使用了下面的行并且它有效。

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

此处进一步描述:<< meta http-equiv="X-UA-Compatible" content="IE=edge"> 做什么?>。

于 2015-01-11T18:39:20.820 回答