返回

在 Apache 上部署 ASP.NET Core 应用时如何消除 URL 中的端口号?

windows

在 Apache 上托管 ASP.NET Core 应用程序:解决 URL 中显示端口的问题

在 Apache 上托管 ASP.NET Core 网站时,您可能会遇到 URL 中显示端口的问题,例如 https://mywebsite.com/。这可能是一个恼人的问题,因为它会破坏网站的专业外观并损害其 SEO 排名。

问题原因

此问题是由以下因素造成的:

  • Kestrel 配置中的多个端口: Kestrel 是 ASP.NET Core 的默认 Web 服务器。如果在 Kestrel 配置中启用了多个端口,则 Apache 将不知道将请求转发到哪个端口。
  • Apache 配置中的错误转发: Apache 配置可能未正确配置以将所有请求转发到 HTTPS 端口 5001。

解决方法

要解决此问题,请执行以下步骤:

1. 修改 Kestrel 配置

在 Program.cs 文件中,确保只打开了端口 5001。例如:

"Kestrel": {
  "Endpoints": {
    "HttpsEndpoint": {
      "Url": "https://*:5001"
    }
  }
}

2. 修改 Apache 配置

在 Apache 配置文件中(例如 httpd.conf),添加以下重写规则以将所有请求转发到端口 5001:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:5001/
    ProxyPassReverse / http://127.0.0.1:5001/
    ServerName mywebsite.com
    ServerAlias *.mywebsite.com
</VirtualHost>

3. 重启服务

重新启动 Apache 和 ASP.NET Core 应用程序以应用更改。

SEO 注意事项

解决 URL 中的端口问题对于 SEO 至关重要。当 URL 包含端口时,搜索引擎会将它们视为不同的 URL,这会导致内容重复和排名下降。通过解决此问题,您可以确保您的网站在搜索结果中获得更好的排名。

常见问题解答

1. 为什么我的 URL 仍然显示端口?

  • 检查您的 Kestrel 配置以确保只打开了端口 5001。
  • 检查您的 Apache 配置以确保重写规则已正确添加。
  • 清除浏览器缓存并重新加载网站。

2. 如何防止 URL 中出现端口?

  • 在 Kestrel 配置中,使用 KestrelServerOptions.ListenAnyIP 方法侦听任何 IP 地址,例如:
builder.WebHost.UseKestrel(options =>
{
    options.ListenAnyIP(5001);
});

3. 我的网站现在在 Apache 上运行安全吗?

  • 是的,前提是您已正确安装和配置 SSL 证书。

4. 是否可以将多个 ASP.NET Core 应用程序托管在 Apache 上?

  • 是的,您可以使用不同的端口为每个应用程序创建虚拟主机。

5. 如何提高 Apache 上 ASP.NET Core 应用程序的性能?

  • 使用模块化模块,例如 mod_deflate 和 mod_cache。
  • 启用 GZIP 压缩。
  • 优化图像和 CSS。

结论

通过遵循这些步骤,您可以解决 Apache 上托管 ASP.NET Core 应用程序时 URL 中显示端口的问题。这将改善您的网站的专业外观并增强其 SEO 排名。如果您遇到任何问题或有其他问题,请随时留言。