Мне нужно иметь несколько локальных сайтов в 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
)
Чего мне не хватает?
Я думаю, что проблема в том, что вы заходите на сайт с помощью 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)
И ваш путь должен работать, как и ожидалось.
Пожалуйста, прокомментируйте, если у вас есть какие-либо проблемы.
Ах! Я думаю, я понимаю вашу проблему ...
Тег ссылки может использовать полный путь, но полный путь начинается с корня документа:
<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
)