如何通过 .htaccess 设置 PHP 包含路径? [英] How to set the PHP include path via .htaccess?

查看:27
本文介绍了如何通过 .htaccess 设置 PHP 包含路径?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to set the PHP include path to another directory. I tried putting this in an .htaccess file, but that didn't work. The only thing I see is the include path's I set in httpd.conf, but not the one I tried to add.

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

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

What am I doing wrong? I did a2enmod mod_php5, but it was already running, so I suppose PHP5 is already running as Apache module.

在我的虚拟主机配置中,我有这个:

In my vhost config I have this:

<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

问候,凯文

推荐答案

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

Apache must be configured to allow settings to be overridden via .htaccess. Check your Apache config file (httpd.conf) for an override for your directory:

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

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

Place this within the vhost definition for your site.

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

If this is a global change, you should change the include_path setting in your php.ini file instead of using .htaccess.

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

Both of these changes will require an Apache restart.

编辑:

这是引用自 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 并应用."

"Suppose that the filename being accessed is /home/abc/public_html/abc/index.html. The server considers each of /, /home, /home/abc, /home/abc/public_html, and /home/abc/public_html/abc in that order. In Apache 1.2, when /home/abc is considered, the regular expression will match and be applied. In Apache 1.3 the regular expression isn't considered at all at that point in the tree. It won't be considered until after all normal s and .htaccess files have been applied. Then the regular expression will match on /home/abc/public_html/abc and be applied."

我认为,根据这些信息,您的 php_value include_path 语句是在 .htaccess 文件之后被评估的.如果是这种情况,您在 .htaccess 中用于 include_path 的值将被覆盖.您可以尝试暂时从 中删除 include_path 行以测试该理论吗?

I think, based on this information, that your php_value include_path statement is being evaluated after the .htaccess file. If that is the case, the value you use for include_path in the .htaccess is being overwritten. Can you try removing the include_path line from <Directory> temporarily to test this theory?

这篇关于如何通过 .htaccess 设置 PHP 包含路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆