从 Angular 应用程序中删除哈希标签后无法从 Apache 访问 API

问题描述 投票:0回答:1

在将 Angular v15 应用程序部署到基于 Apache 的主机时,我在从 URL 中删除

#
主题标签时遇到了一些问题,因为一旦在客户端中关闭它,服务器就无法在刷新时加载正确的页面,并且产生 404 错误。

我找到了,在官方文档中,上面写着:

您必须配置服务器以在请求它没有的文件时返回应用程序的主机页面(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>

解决方案

感谢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/
请求。

angular apache
1个回答
1
投票

确实有。跳过

/api/
URL 的修复。你可以添加这个:

RewriteCond %{REQUEST_URI} !^/api/

所以它会变成:

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

如果请求的 URI 以

/api/
开头,则设置规则不适用的条件。

© www.soinside.com 2019 - 2024. All rights reserved.