Вопрос

Я пытаюсь написать около 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top