如何通过.htaccess设置PHP包含路径?

时间:2011-06-28 14:52:11

标签: php apache .htaccess include apache2

我想将PHP包含路径设置为另一个目录。我尝试将它放在.htaccess文件中,但这不起作用。我唯一看到的是我在httpd.conf中设置的include路径,但不是我试图添加的路径。

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

我做错了什么? 我做了a2enmod mod_php5,但它已经运行了,所以我认为PHP5已经作为Apache模块运行。

[编辑]在我的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 个答案:

答案 0 :(得分:7)

Apache必须配置为允许通过.htaccess覆盖设置。检查您的Apache配置文件(httpd.conf)以获取目录的覆盖:

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

将其放在您网站的虚拟主机定义中。

如果这是全局更改,则应更改php.ini文件中的include_path设置,而不是使用.htaccess。

这两项更改都需要重新启动Apache。

修改

这是Apache Core features page

的引用

“假设要访问的文件名是/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文件之后进行评估。如果是这种情况,则.htaccess中用于include_path的值将被覆盖。您是否可以尝试暂时从include_path删除<Directory>行以测试此理论?

答案 1 :(得分:1)

您是否在PHP代码中尝试过此操作(在代码顶部):

<?php
$path = "../folder/folder/file_name.inc.php";
require_once($path);
?>

答案 2 :(得分:0)

您可以尝试在php文件中使用chdir()将其他位置用作所有文件函数的基本位置,包括includes =)