如何通过 .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
的值将被覆盖。您可以尝试暂时从<Directory>
中删除include_path
行来测试这个理论吗?
【讨论】:
谢谢。我确实有 AllowOverride,但这不起作用。还是资本有问题? (见编辑)不,它不是全球性的。 Kudo 是给你的,它有点用 =D!但是,我怎样才能使用我的“整体”包含目录?我猜在 php.ini 中? @Kevin:至少有两种可能性:1. 不要在<Directory>
指令中使用正则表达式,或者 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 脚本设置 HTTP 标头