У меня Apache 2.2.22 + PHP 5.4.9, работающий на Ubuntu 12.04.
Я размещаю здесь три сайта. Для этого у меня есть 2 виртуальных хоста, указывающих на три разные папки.
Например, это один Vhost для домен1
<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
ServerAdmin support@server.com
DocumentRoot /mnt/htdocs/domain1.com/public
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /mnt/htdocs/domain1.com/public>
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 ${APACHE_LOG_DIR}/domain1.com-error.log
CustomLog ${APACHE_LOG_DIR}/domain1.com-access.log combined
</VirtualHost>
Дело в том, что 1% обращений попадает в неправильную папку. остальные 99% попадают в правильную папку и разрешают правильный домен / код.
Пример ошибки в журнале ошибок domain1.com
[Fri Feb 14 15:21:45 2014] [error] [client 10.183.250.134] PHP Fatal error: Class 'Sitemap\\SitemapServiceProvider' not found in /mnt/htdocs/domain1.com/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 123, referer: http://www.site2.com/someurl
Этот поставщик услуг не существует, поскольку домен domain2.com перенаправлен в папку domain1.com.
Эта ошибка ПОЛНОСТЬЮ СЛУЧАЙНА. Если я перезагружу страницу с ошибкой, сайт отобразится нормально.
Я проверил все строки vhosts, стер все некритичное, чтобы не усложнять задачу, но ошибка не исчезла.
Есть мысли?
У меня есть теория ... Я сам сталкивался с подобной проблемой. Вот мои мысли:
У тебя есть
NameVirtualHost *:80
линия в вашем httpd.conf? Желательно перед всеми твоими VirtualHost определения.
Если у вас нет такой строки, добавьте ее. Если у вас есть строка, в которой явно указан IP-адрес, например:
NameVirtualHost 1.2.3.4:80
затем либо измените его, чтобы он соответствовал вашему VirtualHost определения, или наоборот. Суть в том, что ваш ИмяVirtualHost линия должна соответствовать всем вашим VirtualHost линий. Наконец, должно быть только один Строка NameVirtualHost для всей конфигурации Apache ... т.е. во всех файлах .conf вы должны видеть только одну строку NameVirtualHost. Вы можете использовать что-то вроде:
grep -r ^NameVirtualHost /etc/apache2/*
найти их всех.
Если у вас более одного ИмяVirtualHost и / или все ваши VirtualHost не соответствует твоему ИмяVirtualHost определение, вы получите непредсказуемое / непоследовательное поведение от Apache.