Как установить путь включения PHP через .htaccess? - PullRequest
8 голосов
/ 28 июня 2011

Я хочу установить PHP include-путь к другому каталогу.Я попытался поместить это в файл .htaccess, но это не сработало.Единственное, что я вижу, - это путь включения, который я установил в httpd.conf, но не тот, который я пытался добавить.

<IfModule mod_php5.c>
php_value include_path ".:/var/www/mywebsite/"
</IfModule>

Что я делаю не так?Я сделал a2enmod mod_php5, но он уже был запущен, поэтому я полагаю, что PHP5 уже работает как модуль Apache.

[EDIT] В моей конфигурации vhost у меня есть это:

<Directory ~ "^/var/www/.*">
        AllowOverride All
        Options FollowSymLinks -Indexes -MultiViews
        php_value include_path ".:./include:./.include/:/var/www/.include/:/var/www/"
</Directory>

Подробнееинформация (phpinfo()):

Loaded Modules  core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_auth_mysql mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_status

include_path    .:./include:./.include/:/var/www/.include/:/var/www/    .:/usr/share/php:/usr/share/pear

С уважением, Кевин

Ответы [ 3 ]

7 голосов
/ 28 июня 2011

Apache должен быть настроен так, чтобы параметры могли быть переопределены через .htaccess. Проверьте файл конфигурации Apache (httpd.conf) на наличие переопределения для вашего каталога:

<Directory "/directory/containing/your/htaccess/file">
    AllowOverride All
</Directory>

Поместите это в определение vhost для вашего сайта.

Если это глобальное изменение, вам следует изменить настройку include_path в файле php.ini вместо использования .htaccess.

Для обоих этих изменений потребуется перезапуск Apache.

EDIT :

Это цитата со страницы возможностей Apache Core :

"Предположим, что используемое имя файла /home/abc/public_html/abc/index.html. Сервер рассматривает каждый из /, / home, / home / abc, / home / abc / public_html и / home / abc / public_html / abc в указанном порядке. В Apache 1.2, когда рассматривается / home / abc, регулярное выражение будет соответствовать и применяться. В Apache 1.3 регулярное выражение вообще не рассматривается в этой точке дерева. Он не будет рассматриваться, пока не будут применены все обычные файлы s и .htaccess. Тогда регулярное выражение будет соответствовать / home / abc / public_html / abc и будет применено. "

Я думаю, основываясь на этой информации, что ваш оператор php_value include_path оценивается после файла .htaccess. В этом случае значение, которое вы используете для include_path в .htaccess, перезаписывается. Можете ли вы попробовать временно удалить include_path строку из <Directory>, чтобы проверить эту теорию?

1 голос
/ 28 июня 2011

вы пробовали это в своем PHP-коде (вверху кода):

<?php
$path = "../folder/folder/file_name.inc.php";
require_once($path);
?>
0 голосов
/ 28 июня 2011

Вы можете попробовать использовать chdir () в вашем php-файле, чтобы использовать другое местоположение в качестве базового для всех файловых функций, включая include =)

...