【问题标题】:subdomain realtime mapping in apache tomcatapache tomcat中的子域实时映射
【发布时间】:2026-02-12 19:15:01
【问题描述】:

我需要将一个子域(由用户创建,它意味着动态)映射到同一个登录页面,但我想通过地址栏获取子域参数

例如

www.xyz.koopsz.com

www.abc.koopsz.com

www.mno.koopsz.com

这些 url 应该使用参数 xyz 或 mno 等重定向到登录页面

  • 我做了什么

我想我可以将它映射到 .htaccess www.koopsz.com/abc 然后将其重写为 abc.koopsz.com

经过这么多努力我才知道

apache tomcat 不支持 htaceess

现在我如何在 Apache tomcat 中解决这个问题,我阅读了有关虚拟主机的信息,但是每次添加用户时,我都必须在 server.xml 中进行更改,我需要在运行时使用它。请帮帮我。

【问题讨论】:

  • 我想“htaceess”在这里只是一个错字,而不是你真正的错误信息?
  • 您是否有理由需要更改 URL?为什么不让用户使用www.foo.koopsz.com 访问应用程序并为每个请求使用默认主机?您可以随时从请求中获取主机名以发现foo...它不需要位于主机名的开头。
  • @ChristopherSchultz in www.foo.koopsz.com .. foo 是用户在运行时创建的子域
  • 如果 DNS 不是问题,您不仅将所有主机名指向同一服务器(或集群)并使用用户使用的主机名来检测要使用的配置(大概是您想要使用相同的应用程序但不同的数据库或其他取决于它是哪个用户)?您无需更改 Tomcat 的默认配置:只需为部署单个应用程序的所有内容使用默认主机。

标签: java apache .htaccess tomcat


【解决方案1】:

我相信您正在寻找Tomcat's rewrite valve。这里的其他问题更直接地解释了如何设置它。从Tomcat 8 URL Rewrite 我们看到: 在 conf/server.xml

<Host name="my.domain.com" appBase="webapps/MyDomainServer" unpackWARs="true"
           autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
  <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
  <!-- access logging, aliases,...-->
</Host>

conf/Catalina/my.domain.com/rewrite.config

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$
RewriteRule ^.*$ - [L]

RewriteRule ^.*$ /index.html [L,QSA]

您应该能够插入您用于重写的任何 htaccess 指令。

【讨论】:

  • 我可以动态制作吗?