重写规则为apache 2使用angularjs

显然,在整个networking上有很多mod重写讨论和答案。 但是,我很难抓住他们。 所以我想我会在这里问。

我要求重写规则来做什么安迪·乔斯林在这里的评论中解释: https : //stackoverflow.com/a/11100438

这是我目前在example.com根目录的目录结构

  • 应用程序/
  • app / index.html(angular度js应用程序的“根”)
  • api(这将是一个用于'api'的symfony 2应用程序,我将从angular发送ajax请求到这里。)

我想将所有请求redirect到app / index.html,除了对/ api的请求。

例如:

http://example.com/categories/electronics/ipod实际上就像去http://example.com/app/index.html/categories/electronics/ipod

我想为app / index.html部分被隐藏然而。

然后,对http://example.com/api的请求会有一个例外,因为我需要对这些urlpath发出ajax请求。

感谢任何和所有帮助/指导。

这里有一些让你去(把它放在你的/.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 # otherwise forward it to index.html RewriteRule ^.*$ - [NC,L] RewriteRule ^app/. /app/index.html [NC,L] 

这个问题被接受的答案已经过时了。 现在可以在Apache 2.2.16+的conf文件中使用FallbackResource指令。

 FallbackResource /app/index.html 

如果您希望FallbackResource指令忽略“/ api”路由:

 <Directory /api> FallbackResource disabled </Directory> 

这个答案的问题是,你仍然需要404s文件未找到。 根据一个人如何构建他们的前端应用程序,人们很容易得到css或其他文件的返回404,特别是如果他们正在构建更大的动态应用程序,或者正在外包前端工作。 另外,角度路由通常与文件系统上的任何内容无关。 如果您将其缩小到一个目录,上面可能会工作。 例如,我会经常为与文件系统布局(/ ajs /)无关的所有角度路由使用一个通用前缀。 如果你能做到的话

 <Directory /ajs> FallbackResource /app/index.html </Directory> 

那么它会更有意义,但这似乎并不适合我。 无论后端如何,使用通用前缀还可以使后端规则更加简单。 例如,如果您不使用反向代理,则可以设置一个简单的服务器转发控制器。 它使建模你的Apache重写规则很简单。 例如:

 RewriteEngine On RewriteRule ^/ajs/(.+)$ /index.html 

也就是说,我之前没有看到目录/ fallback方法,所以有兴趣去探索它,因为当我需要的唯一重写是角向前进时。 谢谢!