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

wdebmtf2  于 2023-05-01  发布在  Apache
关注(0)|答案(1)|浏览(109)

在将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/请求。

更新

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

gcxthw6b

gcxthw6b1#

的确有。修复跳过/api/ URL。您可以添加以下内容:

RewriteCond %{REQUEST_URI} !^/api/

所以它会变成:

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

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

相关问题