PHP open_basedir сломан в Apache, но работает на PHP во время выполнения

#php #linux #apache

#php #linux #apache

Вопрос:

Я переношу веб-сайты на новый сервер, и один сайт, который использует open_basedir на своих сайтах-доступный файл вызывает у меня проблемы и просто показывает пустую страницу, когда я пытаюсь ее загрузить.

Я исправил это, переместив конфигурацию open_basedir с виртуального хостинга Apache на передний план index.php страница в ini_set(). Это исправление беспокоит меня, и я чувствую, что чего-то не хватает. Есть ли какая-то конкретная настройка Apache, которую мне нужно изменить или что-то еще, чтобы заставить это работать в конфигурации VirtualHost?

Обратите внимание, что я перезапустил apache после изменения файла, доступного для сайтов.

Вот файл, доступный для сайтов:

 <VirtualHost *:443>
  ServerName www.mysite.com
  ServerAdmin webmaster@mysite.com
  DocumentRoot /var/www/www.mysite.com/content
  php_flag open_basedir /var/www/www.mysite.com/
  SSLEngine On
  SSLCertificateFile /etc/ssl/certs/www_mysite_com.crt
  SSLCertificateKeyFile /etc/ssl/private/www_mysite_com.key
  SSLCACertificateFile /etc/ssl/certs/DigiCertCA.crt
  RewriteEngine on
  FileETag INode MTime Size
  ExpiresActive On
  ExpiresDefault "access plus 1 week"
  ExpiresByType text/html "access plus 5 seconds"
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>
  

Вот ошибка, которую выдает мне Apache (/var/log / apache2/error.log):

 ... PHP Warning:  Unknown: open_basedir restriction in effect. File(/var/www/www.mysite.com/content/index.php) is not within the allowed path(s): (0) in Unknown on line 0
... PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0
... PHP Fatal error:  Unknown: Failed opening required '/var/www/www.mysite.com/content/index.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0
  

Я даже попытался просто установить для базового каталога значение root (php_flag open_basedir /), и это все равно выдало мне ошибку.

Существующий сервер: Debian GNU / Linux 4.0, PHP версии 5.2.0-2, Apache 2.2.3

Новый сервер: Debian GNU / Linux 6.0, PHP версии 5.3.3-7 squeeze3, Apache 2.2.16

Комментарии:

1. Работает ли PHP как модуль Apache? В противном случае вы не сможете использовать php_flag директиву, которая предоставляется mod_php .

Ответ №1:

Попробуйте вместо этого следующее:

 <VirtualHost *:443>
    ...
    php_admin_value open_basedir "/var/www/www.mysite.com/"
    ...
</VirtualHost>
  

Вы используете *_flag там, где вы должны использовать *_value .

*_flag предназначен для логических значений, тогда как *_value предназначен для строк. Смотрите Как изменить параметры конфигурации для получения дополнительной информации.

Комментарии:

1. Спасибо Treffynnon! Я сходил с ума!