目前,我正在托管自己的 (ubuntu) 服务器,其中包含以下服务:samba、ftp 和 webserver。我已购买域名并将 DNS A 记录链接到我的 ISP 的 IP。一切正常。现在我想使用 DNS 通配符记录来创建子域。我想避免在 DNS 更改完成之前等待 24 小时。
到目前为止我只能重定向全部传入通配符到同一目录:
test1.domain.com 重定向到 /var/www
test2.domain.com 重定向到 /var/www
虽然我想得到:
test1.domain.com 重定向到 /var/www/test1
test2.domain.com 重定向到 /var/www/test2
我的猜测是更改文件 /etc/apache2/sites-available/domain。
欢迎任何帮助或建议!
谢谢,
标记
编辑:
这是我的 /etc/apache2/sites-available/domain 文件的样子:
<VirtualHost *:80>
ServerAdmin webmaster@domain
DocumentRoot /var/www/webroot
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/webroot>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
答案1
您应该能够获得所需的行为VirtualDocumentRoot
。
在您的 中<VirtualHost>
,添加ServerAlias
以捕获您感兴趣的所有域:
ServerAlias *.example.com
...然后将它们映射到所需的目录。删除您的DocumentRoot
,并在其位置添加:
VirtualDocumentRoot /var/www/%1
您将需要有一个<Directory /var/www/>
允许访问的块,并且请记住,此 vhost 应该只为您动态配置的 vhost 处理服务 - 如果您希望example.com
并www.example.com
单独处理,那么您希望它们拥有自己的<VirtualHost>
。
编辑:
您将需要使用不同的虚拟主机来处理“基本”域。根据注释中的当前配置进行构建:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName catchall.example.com
ServerAlias *.example.com
# NOTE: this config will map test1.example.com to /var/www/test1
VirtualDocumentRoot /var/www/%1
# If you want that to map instead to /var/www/test1.example.com, then use %0:
# VirtualDocumentRoot /var/www/%0
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# This next vhost should be in a different file in sites-available to
# fit with debian-style vhosts - but make sure it's alphabetically
# after the file that contains the first vhost - we want it to load first
# so that it's default. It can also just go in the same file.
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/www.example.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
答案2
感谢您帮助我找到答案。在这里我找到了我的问题的解决方案,我认为这将帮助其他像我一样的初学者找到上述问题的解决方案。
步骤 1:按照如下所示配置您的网站
vi /etc/apache2/sites-available/yoursite
<VirtualHost *:80> ServerAlias localhost *.yoursite #wildcard catch all VirtualDocumentRoot /path/to/your/workspace/%1/public UseCanonicalName Off <Directory "path/to/your/workspace"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
2)sudo a2ensite /etc/apache2/sites-available/yoursite
3)sudo服务apache2重新加载
4)安装 Dnsmasq:sudo apt-get install dnsmasq
5) 打开 /etc/NetworkManager/NetworkManager.conf 并注释掉 dns=dnsmasq 行。然后重新启动 NetworkManager:sudo restart network-manager。
6)vi /etc/dnsmasq.conf 和行 listen-address=127.0.0.1。
7)在 /etc/dnsmasq.d 中创建一个新文件,然后打开该文件并进行如下编辑
address=/yourdomain/127.0.0.1
8)重新启动Dnsmasq:sudo /etc/init.d/dnsmasq restart。
这也可以在 nginx 中完成。 请注意,这个解决方案对我来说很有效。我想这对其他人也同样有效。