Apache服务器中的Angular 4应用程序

Apache服务器中的Angular 4应用程序,apache,angular,.htaccess,Apache,Angular,.htaccess,我希望在Apache服务器中使用htaccess文件示例 情况如下: 我有一个Angular 4应用程序,需要与后端服务器分开运行。我使用ng build命令部署前端(对于一些内部问题,我不使用ng build--prod),并将生成的文件放在htdocs/app文件夹中 对于特定于客户端的需求,我必须使用apache的相对URL进行重定向 例如:url应该是api/app/something 我已经搜索了Google和Stackoverflow,但建议的解决方案都不起作用。我的htacces如

我希望在Apache服务器中使用htaccess文件示例

情况如下:

我有一个Angular 4应用程序,需要与后端服务器分开运行。我使用ng build命令部署前端(对于一些内部问题,我不使用ng build--prod),并将生成的文件放在htdocs/app文件夹中

对于特定于客户端的需求,我必须使用apache的相对URL进行重定向

例如:url应该是api/app/something

我已经搜索了Google和Stackoverflow,但建议的解决方案都不起作用。我的htacces如下所示:

RewriteEngine on

RewriteRule "api/app" "http://localhost:8080/app/rest/v1$1" [P]

RewriteCond% {REQUEST_FILENAME} -s [OR]
RewriteCond% {REQUEST_FILENAME} -l [OR]
RewriteCond% {REQUEST_FILENAME} -d
RewriteRule ^. * $ - [NC, L]

RewriteRule ^ (. *) Index.html [NC, L]
这个想法是,当我在angular服务器上发出请求时,它会看到api/应用程序路径并重定向到localhost。我已经通过angular cli在dev上使用了这个代理,但我也需要在apache中使用它

另一件事是,当我使用没有散列(#)的路由时,应用程序不会重新加载。如果我从根(“/”)开始,它会正确地遵循路径,但是当我刷新页面时,会得到404错误


我希望我的问题是清楚的。谢谢

将以下代码放在主目录.htaccess文件中

 RewriteEngine on
 RewriteBase /

 RewriteCond %{THE_REQUEST} !\s/+api/app/ [NC]

 #above line will exclude any api/app/something request from the folwoing rule

 RewriteRule ^app/(.*)$ api/app/$1 [R=302,L,NE]

 #above line will change any app/something request to api/app/something

 RewriteRule ^api/app/(.*)$ app/$1 [L,NC]

 #the last line will direct the request api/app/something to the correct path /app/something
更新 关于你的评论,我更愿意在这里回答,因为其他人会从这个回答中受益。 你正在寻找改变APP/某事到API/APP/什么,你不能控制它从应用程序本身,因为主机将考虑应用程序作为子文件夹到API,当请求像API / APP/它将搜索API文件夹,除非在主目录中有规则来引导它的其他位置。 如果您想将其从应用程序更改为应用程序,则api是另一个问题,您可以从应用程序文件夹进行更改,因为主机将应用程序中的规则应用于其子文件夹

所以,在你们的情况下,我可以给你们代码重定向任何应用程序到api/应用程序从应用程序文件夹,但它将无法覆盖文件夹api,除非你们把这个规则放在主目录

我为您编写的代码是将任何请求应用重定向到api/app/但如果有api文件夹,并且还有应用文件夹,它将覆盖它并转到应用文件夹,否则任何没有应用的api请求将转到api文件夹

如果您有api文件夹,并且希望覆盖它,或者希望将任何api/请求重定向到应用程序,请在上面代码的末尾添加以下行,并将所有代码放在主目录中。htaccess和任何api/或api/应用程序将作为应用程序/请求处理

RewriteRule ^api/(.*)$ a/$1 [L,NC]

您所说的主目录是htdocs文件夹中的文件夹?My.htaccess位于C:\Apache24\htdocs\app。我正在使用Windows7。