我有一个应用程序在 tomcat 的 8080 端口上运行。并且它可以与以下 VirtualHost 配置一起正常运行:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ServerName www.subdomain.domain.com
ServerAlias www.subdomain.domain.com *.subdomain.domain.com
ErrorLog /var/log/apache2/subdomain.d/subdomain_er.log
CustomLog /var/log/apache2/subdomain.d/subdomain_requests.log custom
Redirect / https://subdomain.domain.es
</VirtualHost>
现在我有一个新的服务器和一个新的应用程序,它可以过滤“子域名”并根据子域名加载不同的 html 和不同的样式表(子域名由指定自己样式的不同公司创建)。
是否可以使用 https 获取子域名并重定向到同一个子域名?类似 ServerName *.domain.com 并重定向到子域名(*.domain.com)?将其存储在变量中?
我经历了宏,但宏需要将参数传递给它。我不知道在请求中要输入什么参数,可能是公司1,也可能是公司2......
答案1
您可以使用改写Apache 的模块。
首先,使用以下命令确保它在 Ubuntu 中启用:
sudo a2enmod rewrite
如果您将以下配置添加到虚拟主机,则 的任何子域domain.com
都将被重定向到 的子域domain.es
。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
RewriteRule ^/(.*)$ https://%1.domain.es/$1 [R=301,L]
解释:
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com$
此条件将检查主机是否与模式 *.domain.com 匹配,并存储匹配的内容
(.+)
(即子域)。例如,该模式domain.com
将不匹配,而以下模式将匹配:dan.domain.com
www.dan.domain.com
RewriteRule ^/(.*)$ https://%1.domain.es/$1 [R=301,L]
此规则指示 Apache 重定向到 的子域
domain.es
。%1
包含上一个RewriteCond
指令中匹配的值。而$1
包含此指令中匹配的值,因此您可以保持路径原样,而不重定向到域的根目录。
例子:
dan.domain.com
将重定向至https://dan.domain.es
www.dan.domain.com
将重定向至https://www.dan.domain.es
dan.domain.com/example
将重定向至https://dan.domain.es/example
www.dan.domain.com/example
将重定向至https://www.dan.domain.es/example