2011-06-28 87 views
8

我想将PHP包含路径设置为另一个目录。我试图把它放在一个.htaccess文件中,但没有奏效。我唯一看到的是我在httpd.conf中设置的包含路径,但不是我尝试添加的路径。如何通过.htaccess设置PHP包含路径?

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

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

[编辑]在我的虚拟主机的配置我有这样的:

<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

如果你使用它作为一个PHP模块它应该工作。仔细检查你必须安装mod_php5.c模块并仔细检查路径。 'phpinfo()'是你的朋友。 – hakre

+0

谢谢,我会很快发布我的'phpinfo()';)。 –

+0

稍微偏离主题,但如果你有共同的配置文件,你可以使用['set_include_path()'](http://www.php.net/set_include_path)在运行时修改'include_path'。 – binaryLV

回答

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的值将被覆盖。你可以尝试暂时从<Directory>中删除include_path行来测试这个理论吗?

+0

谢谢。我有AllowOverride,但这不起作用。或者是资本的问题? (请参阅编辑)不,它不是全球性的。 –

+0

@Kevin:查看我的更新,并提供更多信息。 –

+0

@George:很好的发现! – hakre

1

有你在你的PHP代码尝试这(在你的代码的顶部):

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

不,这将是太多的工作;),无论如何。 –

+0

对于大型网站,这可能变得几乎无法控制! –

0

您可以尝试使用的chdir()在你的PHP文件中使用另一个位置作为基本位置的所有文件功能,包括包括=)

+0

Thnx;),但这将是太多的工作,它不是那么通用;如果我重命名这个文件夹,我必须改变指向这个文件夹的所有PHP文件。 –

+0

如果你使用一个基本引导脚本,那么它就不是那么有效了=) – Greenisha

+0

是的:),但我仍然更喜欢单个'.htaccess'行:) –