我有一个在 Apache 服务器上运行的网站。当我尝试访问子域名时,我被重定向到主域名。
这是 Apache 配置文件:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName azaanjobs.com
ServerAlias www.azaanjobs.com
DocumentRoot /var/www/azaanjobs/public_html
<Directory /var/www/azaanjobs/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/azaanjobs.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/azaanjobs.com/privkey.pem
</VirtualHost>
</IfModule>
<VirtualHost *:8080>
ServerAdmin [email protected]
ServerName government-jobs.azaanjobs.com
ServerAlias www.government-jobs.azaanjobs.com.com
DocumentRoot /var/www/government-jobs/public_html/
<Directory /var/www/government-jobs/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
我怎样才能解决这个问题?
答案1
Apache 将尝试按照文件系统中出现的顺序将 Web 请求与配置的域进行匹配和在配置文件中。一般来说,最好在处理主站点之前处理子域,主站点应配置为充当任何未处理流量的“全部捕获器”。
考虑到这一点,您的配置文件可以更新为如下所示:
<VirtualHost *:8080>
ServerAdmin [email protected]
ServerName government-jobs.azaanjobs.com
ServerAlias www.government-jobs.azaanjobs.com
DocumentRoot /var/www/government-jobs/public_html/
<Directory /var/www/government-jobs/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName azaanjobs.com
ServerAlias www.azaanjobs.com *.azaanjobs.com
DocumentRoot /var/www/azaanjobs/public_html
<Directory /var/www/azaanjobs/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/azaanjobs.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/azaanjobs.com/privkey.pem
</VirtualHost>
</IfModule>
笔记:
- 更新后的配置文件将错误的
www.government-jobs.azaanjobs.com.com
值替换为ServerAlias
正确的.com
引用 *.azaanjobs.com
在主域中添加了一个别名,以确保捕获任何“意外”流量并将其路由到可能的位置- 主站点上似乎没有任何配置
*:80
,如果服务器前面的某些东西没有将非 SSL 流量转换为使用 SSL,这可能是一个问题 - 子域仍在监听端口
8080
,因此需要进行更新,*:80
然后访问者才可以在浏览器中不指定端口的情况下访问网站
更改配置文件后记得重新启动Apache:
sudo service apache2 restart
这应该能满足你的需求