Apache重写规则未应用于angularjs

mat*_*hew 6 apache mod-rewrite rewrite

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

用于角度js的apache 2的重写规则

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

我的目录结构如下

  • /
  • /应用
  • /app/index.html
  • /应用/ CSS
  • /应用/ JS
  • / API

我正在尝试在httpd-vhosts文件中应用这些重定向规则,这些规则已发布为问题的正确答案/sf/answers/1069939391/.

<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>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试访问/在浏览器中时,我会看到一个空白屏幕.如果我在浏览器中输入/app/index.html但是我能够在浏览器中查看html页面,但是没有一个css.or js可以被访问并返回404.

我一直在疯狂,这似乎是一个简单的事情,作为一个apache重写完成.

任何帮助将非常感激

pk_*_*k__ 14

现在使用FallbackResource指令在Apache 2.2.16+中更加容易.

FallbackResource /app/index.html
Run Code Online (Sandbox Code Playgroud)

http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

根据您转发API访问权限的方式,您可能还需要利用机箱来专门针对API请求(2.2.24+)禁用回退资源.

<Directory /api>
    FallbackResource disabled
</Directory> 
Run Code Online (Sandbox Code Playgroud)


qai*_*ais 11

对我有用:

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !index
    RewriteRule (.*) index.html [L]
</ifModule>
Run Code Online (Sandbox Code Playgroud)


elv*_*o79 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]
Run Code Online (Sandbox Code Playgroud)

注意(.*)#/$1

注意:您必须在包含 CSS、JS 等内容中使用绝对路径,否则您将收到错误:

资源解释为脚本,但以 mime 类型 text/html 传输