Сайты Apache 2-Доступная конфигурация
Вопрос
Я пытаюсь написать около 5 веб-сайтов, все на одном сервере Apache, который находится на одном IP-адресе.
Например:
- /var/www/сайт1
- /var/www/сайт2
- /var/www/сайт 3
- /вар/www/site4
- /var/www/сайт 5
Однако, если я создам ссылку на сайте 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>
Любая помощь была бы оценена по достоинству.
Сердечно благодарю вас.
Эндрю Барлоу
Решение
Вам нужна директива ServerName внутри <VirtualHost>
.Он сообщит серверу, какой виртуальный хост в данный момент используется, в зависимости от запроса браузера (если ваш клиентский доступ http://site1.example.com или http://site2.example.com, они будут подключаться к одному и тому же IP, следовательно, серверу, но запрос содержит исходный URL запроса).Вам придется продублировать свой <VirtualHost>
заблокируйте, чтобы иметь по одному на каждый размещенный сайт.Каждый блок будет отличаться главным образом своим именем сервера и 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-адресе сервера и у вас есть соответствующее для них имя сервера.Если вам нужны дополнительные имена для одного сайта, вы можете добавить их с помощью "ServerAlias secondname.myserver.com thirdname.myserver.com" под именем сервера
Другие советы
Ответ @Zeograd, вероятно, является правильным ответом для большинства решений, однако у меня была похожая проблема, и все, что мне нужно было сделать, это включить модуль перезаписи с a2enmod
команда.
Это то, что я запустил через командную строку в Убунту:
sudo a2enmod rewrite
sudo service apache2 restart
Если sudo service apache2 restart
не работает, вы можете попробовать:
sudo /etc/init.d/apache2 restart