我想将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
此致 凯文
答案 0 :(得分:7)
Apache必须配置为允许通过.htaccess覆盖设置。检查您的Apache配置文件(httpd.conf)以获取目录的覆盖:
<Directory "/directory/containing/your/htaccess/file">
AllowOverride All
</Directory>
将其放在您网站的虚拟主机定义中。
如果这是全局更改,则应更改php.ini文件中的include_path设置,而不是使用.htaccess。
这两项更改都需要重新启动Apache。
修改强>:
的引用“假设要访问的文件名是/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 =)