Apache 根据主机名提供静态内容

Apache 根据主机名提供静态内容

我在 apache 后面运行了 tomcat,并在其上运行了一些 Web 应用程序。我的应用程序处理白标,因此如果某个用户访问 subnet1.myhost.com,他将看到某个网站,而访问 subnet2.myhost.com,他将看到另一个网站

作为解决方案的一部分,apache 应该处理 css 请求并将其重定向到正确的位置,因此如果来自 subnet1.myhost.com 的客户端应用程序请求 /styles/main.css,apache 应该根据主机名将其重定向,因此它将是 /subnet1/styles/main.css 我该如何配置这种行为?

谢谢

答案1

如果你想要一个 VirtualHost,你可以使用 mod_rewrite 来实现:

<VirtualHost :80>
   ServerName *.myhost.com

   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^(.*)\.myhost\.com
   RewriteRule ^/styles/(.*)$ /%1/styles/$1 [L]
</VirtualHost>

您的文档根目录必须具有以下结构:

subnet1
   styles
       file1.css
       file2.css
subnet2
   styles
       file1.css
       file2.css
other_files_shared_across_domains

你的 css URL 看起来应该是这样的:

http://subnet1.myhost.com/styles/file1.css
http://subnet1.myhost.com/styles/file2.css

http://subnet2.myhost.com/styles/file1.css
http://subnet2.myhost.com/styles/file2.css

要添加新的子域名,只需将新文件夹添加到 DocumentRoot 文件夹即可

答案2

通过为每个自定义站点设置不同的 VirtualHost 块可以轻松实现这一点。例如

<VirtualHost :80>
  ServerName subnet1.myhost.com

  Alias /styles /subnet1/styles

  ...
</VirtualHost>

代表...转发到 Tomcat 的每个块中的相同关键字。您可以在此处包含一个文件。

在 Debian 或 Ubuntu 下,您可以将每个块放入其自己的文件中/etc/apache2/sites-available。对于 Ubuntu 12.04 或更早版本,文件没有.conf扩展名,但对于较新的 Ubuntu 版本,文件有扩展名。

然后运行sudo a2ensite subnet1.myhost.com以启用该站点。

相关内容