在将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!:)
1条答案
按热度按时间gcxthw6b1#
的确有。修复跳过
/api/
URL。您可以添加以下内容:所以它会变成:
如果请求的URI以
/api/
开头,则设置规则不适用的条件。