在 SPA 上配置带有重定向 url 的路由?

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

我有一个域名 mydomain,它在我的 vps ubuntu apache Web 服务器上重定向,主机名为 myvps。在 myvps 上我有 Angular 应用程序。

如果我转到 mydomain,它会将我重定向到 myvps/home,并且在浏览器中 url 是 mydomain,这是可以的并且可以工作。但是,如果我使用 reload() 方法或浏览器上的刷新按钮刷新页面,则会收到错误“no page mydomain/home”。如何在单页应用程序中执行此操作? htaccess 有帮助吗?

单击我的应用程序中的链接有效。重新加载不起作用。我认为这是因为它使用 mydomain + angularComponet 而不是我的index.html/angularComponent。

angular .htaccess url apache2
1个回答
0
投票

重新加载/刷新不起作用,因为您正在向您的 (Apache) 服务器发送新的 HTTP 请求,并且您的服务器不知道如何响应。当您单击应用程序中的链接时,JS/Angular 会捕获事件并通过 Angular 前端控制器路由请求 - 这一切都发生在客户端(没有直接发送到服务器的 HTTP 请求,除了那些可能通过 Angular 发起的请求) .

您需要实现服务器端前端控制器模式,以便对服务器的任何“未知”HTTP 请求也可以通过 Angular 前端控制器进行路由。

在 Apache 上,您可以在根

.htaccess
文件(或服务器配置)中执行类似以下操作。这使用了 mod_rewrite。

DirectoryIndex index.html

RewriteEngine on

# Angular front-controller
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]

这是一种标准的前端控制器模式,它将所有未映射到文件或目录的请求路由到文件

index.html
(Angular 前端控制器),然后由该文件处理该请求。

您需要确保在服务器配置中启用

.htaccess
覆盖(
AllowOverride All
需要在适当的位置设置,例如相关
<Directory>
内的
<VirtualHost>
容器,并重新启动 Apache)。您还需要确保安装/启用了 mod_rewrite,否则这将生成“500 内部服务器错误”(在这种情况下,请检查服务器的错误日志以获取详细信息)。

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