我确信必须已经多次询问过这个问题,我花了一天的时间对其进行了研究,但仍然无法解决。
我有一个域-domain.com,现在我想为其添加一个子域-test.domain.com。我创建了一个虚拟主机文件和DNS A记录-test.domain.com指向我的服务器IP。但是,每当我尝试访问test.domain.com时,它都会一直重定向到domain.com。我的Apache2虚拟主机文件配置如下
domain.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/domain.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.domain.com [OR]
RewriteCond %{SERVER_NAME} =domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<Directory "/var/www/domain.com">
AllowOverride All
</Directory>
domain.com-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/domain.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName domain.com
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias www.domain.com
SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
</VirtualHost>
</IfModule>
test.domain.com.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/test.domain.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.test.domain.com [OR]
RewriteCond %{SERVER_NAME} =test.domain.com
RewriteRule ^ http://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<Directory "/var/www/test.domain.com">
AllowOverride All
</Directory>
我已经使用命令a2ensite启用了conf文件,并已经多次重启apache(并且拼命是我的服务器Drop),但仍然无法正常工作。我正在Ubuntu 16.04.6上运行。
任何建议都将不胜感激。预先非常感谢!
一个简单的例子将遵循这些原则:
<VirtualHost *:80>
DocumentRoot /var/www/test.example.com
ServerName test.example.com
ServerAlias www.test.example.com
</VirtualHost>
在此示例中,您为test.example.com
以及www.test.example.com
声明了一个虚拟主机。
请注意,由于此网站上的posting restrictions有效,因此我在这里使用example.com而不是domain.com。
至少在语法上,您的子域中的RewriteRule指令似乎不正确。它们可能导致重定向问题。因此,我将其删除并在以后处理重定向。从简单的配置开始,对其进行验证,然后在以后使用更多规则进行扩展。
提示:您可以使用curl
(如果您的PC上没有PC,则从服务器上的命令行使用)进行测试:curl -L --head "http://example.com"
。测试主域名,然后测试http和https中的子域名。如果遇到任何问题,Curl中有一个选项可以忽略SSL / TLS错误。查看会发生什么,并注意重定向(如果有)(状态码301/302)。
我更喜欢使用Curl进行测试,因为浏览器缓存可以对您起到欺骗作用。