我不敢相信我以前没有这样做,但我想要一个明确的答案,所以我都将前进.
我在/ etc / apache2 / sites-available / mysite中有一个apache配置文件,如下所示:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /home/sam/public_html <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/sam/public_html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> 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 </VirtualHost>
所以这提供了从〜/ public_html的html和PHP文件都很好.但我有多个项目,所以想开始使用子域名.我想做的是将〜/ public_html / myproject /中的文件作为myproject.localhost的根目录.
<VirtualHost myproject.localhost> DocumentRoot ~/public_html/myproject/ ServerName myproject.localhost ServerAdmin admin@myproject.localhost <Directory ~/public_html/myproject> Options Indexes FollowSymLinks AllowOverride FileInfo Order allow,deny Allow from all </Directory> </VirtualHost>
但是apache抱怨说:
Restarting web server: apache2[Tue Aug 20 11:06:19 2013] [error] (EAI 2)Name or service not known: Could not resolve host name myproject.localhost -- ignoring! ... waiting [Tue Aug 20 11:06:20 2013] [error] (EAI 2)Name or service not known: Could not resolve host name myproject.localhost -- ignoring!
我知道我犯了一个根本错误,但我不知道是什么.
任何帮助非常感谢.
编辑:
这是我现在完整的文件:
<VirtualHost *:80> DocumentRoot /home/sam/public_html/ryua1226-magento/ ServerName mydomain.localhost ServerAdmin admin@mydomain.localhost <Directory /home/sam/public_html/ryua1226-magento> Options Indexes FollowSymLinks AllowOverride FileInfo Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /home/sam/public_html <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/sam/public_html> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
解决方法
你告诉Apache你想要在
<VirtualHost>
标签内部回答什么IP和端口,所以这里*表示任何IP,但在端口80上接受对这个站点的请求.接下来你需要告诉Apache文档根目录. 〜/表示您的默认主目录,所以如果您的DocumentRoot恰好是默认的home变量,那么它可以使用现有的符号(取决于您正在运行服务器的用户).然后您将声明服务器名称.
您创建主机的每个域名都需要自己的虚拟主机指令,除非您使用别名.
<VirtualHost *:80> DocumentRoot /home/sam/public_html ServerName myproject.localhost # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot /home/sam/public_html/myproject ServerName myotherproject.localhost # Other directives here </VirtualHost>
关于主机除此之外,您为主机创建的任何特殊名称也需要进入主机文件或DNS服务器.这样,任何正在寻找服务器的Web浏览器都可以找到它,而无需输入IP.因为如果您尝试使用IP访问服务器,您将只能在第一个主机上响应IP(通常是vhosts列表中的顶部),因此您可能会在同一个IP上安装多台主机,.