在将ANGLE v15应用程序部署到基于apache的主机上时,我在从URL中删除#标签时遇到了一些问题,因为一旦在客户端将其关闭,服务器就无法在刷新时加载正确的页面,并产生404错误.

我找到了,in the official documentation,上面写着:

您必须将服务器配置为在请求不具有的文件时返回应用程序的主页(index.html

我发现我应该将这个部分添加到网站的.htaccess个文件中:

<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.html$ - [L]
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule . index.html [L]
</IfModule>

我现在面临的问题是,更改后,我的API不再工作.它是从/api/根开始的,从mywebsite.com/api/login开始,它现在将我转发到index.html.

有没有解决这个问题的Angular ,添加/api异常,不知何故,或它是对上述脚本的修复,跳过/api路由?


这是我在网站根目录中的完整.htaccess文件,托管在A2:

# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
PassengerAppRoot "/home/vitalyto/ptintec-api"
PassengerBaseURI "/"
PassengerNodejs "/home/vitalyto/nodevenv/ptintec-api/16/bin/node"
PassengerAppType node
PassengerStartupFile src/index.js
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.html$ - [L]
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule . index.html [L]
</IfModule>

SOLUTION

感谢Nigel Peck的回答,htaccess的正确加法如下:

<IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.html$ - [L]
     RewriteCond %{REQUEST_URI} !^/api/
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteRule . index.html [L]
</IfModule>

现在我的Angular v15+可以很好地工作,没有令人讨厌的URL中的#,并可以处理/api/个请求.

UPDATE

后来,我发现这个有whole generator project分!:)

推荐答案

确实是有的.跳过/api/个URL的修复.您可以添加以下内容:

RewriteCond %{REQUEST_URI} !^/api/

因此,它将变得:

RewriteCond %{REQUEST_URI} !^/api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]

设置一个条件,如果请求的URI以/api/开头,则规则不适用.

Angular相关问答推荐

如何go 除融合图中的拖尾水印?

更改图表上的光标以进行zoom

Angular 16:CSRF配置:我仍然可以使用HttpXsrfInterceptor和HttpXsrfCookieExtractor类吗?Inteli-J说他们不存在

倒计时计时器,每10秒重新启动一次,共4次

我应该对我想要在我的Angular 17+组件中显示的任何变量使用信号吗?

如何在Angular功能路由保护中取消订阅RxJs主题

除非将 signal.set 作为间隔的一部分调用,否则Angular 信号效果不会执行

Angular 升级后 RXJS SwitchMap 无法与解析器一起正常工作

RxJs 中的空闲可观察对象在幕后做了什么?

通过 SignalR 事件组件重定向Angular 页面后不起作用

RxJS 基于先前的数据响应执行请求(涉及循环对象数组)

Angular 从 13.3.8 恢复到 13.3.7

如何在 Angular 5 HttpInterceptor 中添加多个标头

如何使用 Bootstrap 4 flexbox 填充可用内容?

如何在 Angular2 中的所有请求的请求标头中发送Cookie?

如何设置背景 colored颜色 IONIC 4

在 Angular rxjs 中,我什么时候应该使用 `pipe` 与 `map`

Angular 2:为什么在检索路由参数时使用 switchMap?

如何使用formControlName和处理嵌套的formGroup?

使用 EventEmitter 传递参数