如何配置重写规则,即使在 URL 中使用别名,请求也会路由到服务器名称

Posted

技术标签:

【中文标题】如何配置重写规则,即使在 URL 中使用别名,请求也会路由到服务器名称【英文标题】:How to Configure rewrite rule , so that the request will route to server name even if alias name is used in URL 【发布时间】:2021-04-29 12:45:12 【问题描述】:

我们有一个包含以下内容的虚拟主机文件,

    NameVirtualHost *:8888
    <VirtualHost *:8888>
      ServerName example.domain.com
      ServerAlias example
      DocumentRoot /opt/weblogic/product/virtualhosts/example.domain.com/htdocs
      ErrorLog /opt/weblogic/product/virtualhosts/example.domain.com/logs/error_log
      RewriteEngine On
      #RewriteRule  ^/?$ %REQUEST_URI/StartPage [R,L]
      RewriteOptions Inherit
      DirectoryIndex index.html startpage.jsp
      <Directory />
        Require all granted
      </Directory>
    </VirtualHost>

我们可以使用服务器名和别名访问应用程序。

    http://example.domain.com 扩展为 http://example.domain.com/StartPage/startpage.jsp http://example 扩展为 http://example/StartPage/startpage.jsp

现在,当我们使用服务器别名时,要求将 url 重定向到服务器名称,如下所示

http://example 扩展为 http://example.domain.com/StartPage/startpage.jsp

谁能帮我修改 vhost 文件以使其正常工作。

【问题讨论】:

【参考方案1】:

这可能是您正在寻找的:

RewriteCond %HTTP_HOST ^example$
RewriteRule ^ https://example.domain.com%REQUEST_URI [R=301,QSA,END]

规则必须紧跟带有条件的行。并且重定向应该在其他重定向之前完成。

从 302 重定向开始是一个好主意,只有在您确定一切正常后才将其更改为 301。

如果您不想保留所请求 URL 的路径,而是始终重定向到固定的路径前缀,那应该没问题:

RewriteCond %HTTP_HOST ^example$
RewriteRule ^ https://example.domain.com/StartPage [R=301,QSA,END]

【讨论】:

以上是关于如何配置重写规则,即使在 URL 中使用别名,请求也会路由到服务器名称的主要内容,如果未能解决你的问题,请参考以下文章

如何为 GET 请求正确配置 Apache 重写规则?

如何配置iis rewrite模块的url重写规则

IIS URL重写https规则忽略本地主机

关于请求转发重定向url重写

思路-URL重写

在 IIS7 URL 重写模块中,我可以在重定向规则中指定不适用于 http-post 请求吗?