Angular 8 应用程序:window.open 在新的 window 中总是重定向到 index.html

Angular 8 app: window.open in new window always redirects to index.html

我已经为我的应用程序设置了一个标签,该标签附加了一个指令,该指令将调用 window.open 希望我的应用程序在我的路线路径中的新 window 中打开

window.open(
      '/my-path',
      '_blank',
      'height=550,width=1400'
    );

这一切在 localhost 中都工作得很好,但出于某种原因,当我进入 dev 时,新的 window 总是想重定向到 index.html 并且只是将我跳转到根目录,而不是比去 /my-path.

知道我可能遗漏了什么吗?

我猜想(因为问题可能有多种原因...)您的服务器试图处理对子路由的请求,但这应该由 Angular.[=18 在客户端完成=]

您必须将服务器配置为对所有请求回退到 index.html

示例阿帕奇:

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

Nginx 示例:

try_files $uri $uri/ /index.html;

Angular documentation 中有更多详细信息。

AWS 更新:

AWS Amplify 默认重定向到 index.html 时会发生 404 错误,但这是一个简单的重定向。来自 docs

Most SPA frameworks support HTML5 history.pushState() to change browser location without triggering a server request. This works for users who begin their journey from the root (or /index.html), but fails for users who navigate directly to any other page. Using regular expressions, the following example sets up a 200 rewrite for all files to index.html except for the specific file extensions specified in the regular expression.

以下设置适用于 AWS Amplify:

// Original address
</^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>

// destination
/index.html

// Redirect Type
200