Создать несколько сайтов в одном экземпляре Apache

Мне нужно иметь несколько локальных сайтов в Apache. Поэтому я добавляю виртуальный хост для каждого:

#/etc/apache2/sites-available/example.com:
<VirtualHost 127.0.0.1:80>
        ServerAdmin webmaster@example.com
        ServerName  www.example.com
        ServerAlias example.com

        # Indexes + Directory Root.
        DirectoryIndex index.php
        DocumentRoot /var/www/example.com/htdocs/

        # CGI Directory
        ScriptAlias /cgi-bin/ /var/www/example.com/cgi-bin/
        <Location /cgi-bin>
                Options +ExecCGI
        </Location>


        # Logfiles
        ErrorLog  /var/www/example.com/logs/error.log
        CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

А затем я делаю sudo a2ensite example.com и sudo service apache2 restart. Проблема в том, что корневые пути не работают. Например, когда я говорю <link href="/css/somefile.css" rel="stylesheet"> где-то в /var/www/example.com/htdocs/index.php, apache не может предоставить /var/www/example.com/htdocs/css/somefile.css браузеру (просматриваю: localhost/example.com/htdocs)

Чего мне не хватает?

0
задан 9 December 2013 в 22:06

2 ответа

Я думаю, что проблема в том, что вы заходите на сайт с помощью localhost / example.com / htdocs

Вы можете сделать следующее:

В настройках вашего vhost переключите ServerName и ServerAlias:

ServerName  example.com
ServerAlias www.example.com

перезапустите apache2 с помощью:

sudo /etc/init.d/apache2 restart

Теперь в / etc / hosts добавьте 2 строки:

127.0.0.1 example.com
127.0.0.1 www.example.com

Теперь вы можете иметь доступ к сайту с www.example.com или example.com. (Это работает, если вы работаете на той же машине, где установлен Apache)

И ваш путь должен работать, как и ожидалось.

Пожалуйста, прокомментируйте, если у вас есть какие-либо проблемы.

0
ответ дан 9 December 2013 в 22:06

Ах! Я думаю, я понимаю вашу проблему ...

Тег ссылки может использовать полный путь, но полный путь начинается с корня документа:

<link href="/css/somefile.css" .../>

Полный путь на диске (/var/www/example.com/htdocs/css/somefile.css) действительно не будет работать.

Apache делает следующее:

DocumentRoot /var/www/example.com/htdocs/
+
<link href="/css/somefile.css" .../>
=
/var/www/example.com/htdocs/css/somefile.css

DocumentRoot является своего рода виртуальным корневым (/) каталогом для веб-сайта. Это предотвращает доступ ваших посетителей к файлам, к которым у них никогда не должно быть доступа (представьте себе файл, такой как: /etc/passwd)

0
ответ дан 9 December 2013 в 22:06

Другие вопросы по тегам:

Похожие вопросы: