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

Posted

技术标签:

【中文标题】如何通过 .htaccess 设置 PHP 包含路径?【英文标题】:How to set the PHP include path via .htaccess? 【发布时间】:2011-09-24 09:43:16 【问题描述】:

我想将 php 包含路径设置到另一个目录。我试着把它放在一个 .htaccess 文件中,但这没有用。我唯一看到的是我在 httpd.conf 中设置的包含路径,但不是我尝试添加的路径。

<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

问候, 凯文

【问题讨论】:

如果您将它用作 php 模块,它应该可以工作。仔细检查您必须安装的 mod_php5.c 模块并仔细检查路径。 phpinfo() 是你的朋友。 谢谢,我会尽快发布我的phpinfo() ;)。 有点跑题了,但是如果你有通用的配置文件,可以在运行时使用set_include_path()修改include_path 是的,我会考虑这个选项。但我首先想确定这是否可能。我还是更喜欢单行.htaccess ;)。 您的.htaccess 是否驻留在文档根目录中? 【参考方案1】:

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

【讨论】:

谢谢。我确实有 AllowOverride,但这不起作用。还是资本有问题? (见编辑)不,它不是全球性的。 Kudo 是给你的,它有点用 =D!但是,我怎样才能使用我的“整体”包含目录?我猜在 php.ini 中? @Kevin:至少有两种可能性:1. 不要在 &lt;Directory&gt; 指令中使用正则表达式,或者 2. 在 .htaccess 文件中包含完整路径。【参考方案2】:

您是否在您的 PHP 代码中尝试过这个(在您的代码顶部):

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

【讨论】:

对于大型网站,这可能变得几乎无法管理!【参考方案3】:

您可以尝试在 php 文件中使用 chdir() 来使用另一个位置作为所有文件函数的基本位置,包括包含 =)

【讨论】:

Thnx ;),但工作量太大,而且不是那么通用;如果我重命名这个文件夹,我必须更改所有指向这个文件夹的 PHP 文件。 如果你使用一个基本的引导脚本 =) 是的 :),但我还是更喜欢单行 .htaccess :)

以上是关于如何通过 .htaccess 设置 PHP 包含路径?的主要内容,如果未能解决你的问题,请参考以下文章

通过 .htaccess 在 PHP 中延长会话超时

通过 .htaccess 在 PHP 中延长会话超时

通过 .htaccess 文件为所有 PHP 脚本设置 HTTP 标头

如何在 .htaccess 中包含 php 文件?

apache 2.2 (ubuntu) 不允许我通过.htaccess 设置php 错误报告?

如何通过 htaccess 显示 PHP 错误 [重复]