www*_*com 9 php apache .htaccess apache2 include
我想将PHP包含路径设置为另一个目录.我尝试将它放在.htaccess文件中,但这不起作用.我唯一看到的是我在httpd.conf中设置的include路径,但不是我试图添加的路径.
<IfModule mod_php5.c>
php_value include_path ".:/var/www/mywebsite/"
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我做了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>
Run Code Online (Sandbox Code Playgroud)
更多信息(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
Run Code Online (Sandbox Code Playgroud)
问候,凯文
必须配置Apache以允许通过.htaccess覆盖设置.检查您的Apache配置文件(httpd.conf)以获取您的目录的覆盖:
<Directory "/directory/containing/your/htaccess/file">
AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)
将其放在您网站的vhost定义中.
如果这是全局更改,则应更改php.ini文件中的include_path设置,而不是使用.htaccess.
这两个更改都需要重新启动Apache.
编辑:
这是来自Apache Core功能页面的引用:
"假设要访问的文件名是/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文件之后进行评估.如果是这种情况,include_path则会覆盖.htaccess中使用的值.你能尝试暂时删除该include_path线<Directory>来测试这个理论吗?