htaccess 文件、php、包括目录和 windows XAMPP 配置噩梦

Posted

技术标签:

【中文标题】htaccess 文件、php、包括目录和 windows XAMPP 配置噩梦【英文标题】:htaccess files, php, includes directories, and windows XAMPP configuration nightmare 【发布时间】:2010-09-14 05:56:45 【问题描述】:

XAMPP 让为 Windows 配置本地 LAMP 堆栈变得轻而易举。因此,启用 htaccess 文件是一场噩梦,这非常令人失望。

我的问题: 我有一个 php 应用程序,它需要 apache/php 来搜索应用程序中包含的 /includes/ 目录。为此,apache 中必须允许 htaccess 文件,并且 htaccess 文件必须准确指定包含目录的位置。

问题是,我无法让我的 apache 配置查看这些 htaccess 文件。我在 uni 安装这个应用程序并让管理员在那里帮助设置时遇到了很大的麻烦。这不应该那么难,但由于某种原因,我无法让 apache 玩得很好。

这是我的设置:

c:\xampp c:\xampp\htdocs c:\xampp\apache\conf\httpd.conf - 我在其中进行了下面列出的更改 c:\xampp\apache\bin\php.ini - 更改此文件会影响 php 安装 有趣的是,c:\xampp\php\php.ini 更改没有任何意义——这不是影响 php 安装的 ini。

以下几行是我在 httpd.conf 文件中添加的内容

#AccessFileName .htaccess
AccessFileName htaccess.txt
#
# The following lines prevent .htaccess and .htpasswd 
# files from being viewed by Web clients. 
#
#<Files ~ "^\.ht">
<Files ~ "^htaccess\.">
    Order allow,deny
    Deny from all
</Files>

<Directory "c:/xampp/htdocs">
#
# AllowOverride controls what directives may be placed in 
# .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

以下是整个htaccess文件包含在: c:\xampp\htdocs\application\htaccess.txt

<Files ~ "\.inc$">
  Order deny,allow
  Deny from all
</Files>

php_value default_charset "UTF-8"
php_value include_path ".;c:\xampp\htdocs\application\includes"
php_value register_globals 0
php_value magic_quotes_gpc 0
php_value magic_quotes_runtime 0
php_value magic_quotes_sybase 0
php_value session.use_cookies 1
php_value session.use_only_cookies 0
php_value session.use_trans_sid 1
php_value session.gc_maxlifetime 3600
php_value arg_separator.output "&amp;"
php_value url_rewriter.tags "a=href,area=href,frame=src,input=src,fieldset="  

包含目录存在于指定位置。

当我尝试访问应用程序时,我收到以下错误:

Warning: require(include.general.inc) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\application\menu\logon.php on line 21

致命错误:require() [function.require]:在 C:\xampp\htdocs 中打开所需的 'include.general.inc' (include_path='.;C:\xampp\php\pear\random') 失败\application\menu\logon.php 在第 21 行

包含路径 c..\random\ 在上面列出的 php.ini 文件中指定。 xampp 安装无法允许在 htaccess.txt 文件中指定的另一个包含路径。

请帮忙!我猜 httpd.conf 或 htaccess.txt 文件可能有错误。但它似乎没有读取 htaccess 文件。我试图尽可能彻底,所以请原谅这篇文章的冗长。

现在我知道一种解决方法是简单地将 include_path 添加到 php 文件,但我无法访问我计划部署应用程序位置上的 php.ini 文件。但是,我将能够请求服务器管理员允许 htaccess 文件。

更新:将 htacces.txt 重命名为 .htaccess 并修改了 httpd.conf 文件中的相应指令,似乎一切正常。该应用程序建议命名 htaccess.txt 和 httpd 中的修正指令。这些显然是错误的(至少对于 xampp 堆栈而言)。谢谢您的帮助。

顺便说一句,如果需要将应用程序部署到多个位置,使用 ini_set() 是一种更友好的方式,因此特别感谢该指针。

【问题讨论】:

【参考方案1】:
    为什么需要将.htaccess 重命名为htaccess.txt 尝试使用 set_include_path() 设置 include_path,看看是否有帮助(作为中间修复) 通过phpinfo() 验证要使用的 php.ini

【讨论】:

【参考方案2】:

您可以使用 ini_set() 更改每个请求的 include_path。这将完全避免使用 htaccess。

【讨论】:

【参考方案3】:

我的 htaccess 在 XAMPP 下可以正常工作 - 尽管默认情况下禁用了某些模块 - 你确定你想要的模块已启用吗?

【讨论】:

我启用了 mod_rewrite .. 还有其他我需要启用的模组吗? 我需要 mod_cache - 我可以说它不起作用,因为当我有 .htaccess 文件时,我遇到了服务器错误 - 这和你的症状一样吗?【参考方案4】:

我认为您正在寻找的 searchprase 是:

AllowOverride All

我的猜测是,在 xampp 中,您需要在 httpd.conf 中启用 AllowOverride(通过 .htaccess)。这是一种简单的安全措施,可以防止新手安装可破解的平台:P

【讨论】:

【参考方案5】:

您需要在主 http.conf 文件中启用 AllowOverride All。查看 XAMPP_DIR/apache/conf/http.conf)

【讨论】:

【参考方案6】:

只需这样做:

open file ...\xampp\apache\conf\httpd.conf

find line "LoadModule rewrite_module modules/mod_rewrite.so"

if here is a # before this line remove it.(remove comment)

它的工作原理

【讨论】:

以上是关于htaccess 文件、php、包括目录和 windows XAMPP 配置噩梦的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess - 将所有 URL + 现有目录重定向到 index.php

PHP & .htaccess:为多个目录添加文件

.htaccess 只允许访问 index.php 和一个目录

htaccess - 重写具有同名目录的文件

将多个 php 文件视为目录,htaccess

每个目录和子目录中的可疑 .htaccess 文件