我正在尝试在一个Apache服务器上写下大约5个网站,这些服务器都在一个IP地址上。
例如:
但是,如果我在网站2上创建一个链接,例如使用。 /index.php,你会期望它在/var/www/site2/index.php中查找...但它实际上解析为/var/www/index.php。
是否有设置Apache以了解单独的站点文件夹需要表现并解析为单独的文件夹?
目前这是我的网站可用文件。我相信一个相当默认的设置:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
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">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/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>
任何帮助都会被贬低。
谢天谢地。
Andrew Barlow
答案 0 :(得分:11)
您需要<VirtualHost>
内的ServerName指令。它将告诉服务器当前正在使用哪个虚拟主机,具体取决于浏览器请求(如果您的客户端访问http://site1.example.com或http://site2.example.com,它们将连接到相同的IP,因此服务器,但请求包含原始请求网址)。
您必须复制<VirtualHost>
块,才能为每个托管网站添加一个。每个块的主要区别在于ServerName和DocumentRoot。
您可以使用“apache2ctl -S”查看apache如何理解您的虚拟主机设置。
您可以使用包含此类内容的单个文件:
<VirtualHost *:80>
ServerName site1.myserver.com
DocumentRoot /var/www/site1
...
</VirtualHost>
<VirtualHost *:80>
ServerName site2.myserver.com
DocumentRoot /var/www/site2
...
</VirtualHost>
<VirtualHost *:80>
ServerName site3.myserver.com
DocumentRoot /var/www/site3
...
</VirtualHost>
<VirtualHost *:80>
ServerName site4.myserver.com
DocumentRoot /var/www/site4
...
</VirtualHost>
<VirtualHost *:80>
ServerName site5.myserver.com
DocumentRoot /var/www/site5
...
</VirtualHost>
当然,也许可以肯定所有这些名称的dns最终都会出现在您的IP上。它不需要是子域,只要它们落在你的服务器ip上并且你有一个对应的ServerName。如果您需要单个站点的额外名称,可以在ServerName下面添加“ServerAlias secondname.myserver.com thirdname.myserver.com”
答案 1 :(得分:3)
@ Zeograd的答案可能是大多数解决方案的正确答案,但是我遇到了类似的问题,我需要做的就是使用a2enmod
命令启用重写模块。
这是我在 Ubuntu :
中通过命令行运行的内容sudo a2enmod rewrite
sudo service apache2 restart
如果sudo service apache2 restart
不起作用,您可以尝试:
sudo /etc/init.d/apache2 restart