将mac os x从10.8.3更新为10.8.4后,mod_hfs_apple中出现"错误的URI或URI中不可接受的Unicode"错误

Eug*_*ene 5 apache macos

我已经在我的笔记本电脑上使用Apache/2.2.22(Unix)DAV/2 PHP/5.3.15设置了本地开发机器.一切正常,直到我升级OS X.每当我尝试访问我的localhost服务器时,我都会收到403错误.我检查了我的apache error_log并找到了这些条目.

[Mon Jun 24 14:48:30 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/index.html, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
[Mon Jun 24 14:48:30 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/index.php, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
[Mon Jun 24 14:48:31 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/index.html, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
[Mon Jun 24 14:48:31 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/index.html, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
[Mon Jun 24 14:48:31 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/index.php, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
[Mon Jun 24 14:48:31 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Eugene/Sites/favicon.ico, wants: /\xe2\x80\x9c/Users/Eugene/Sites/\xe2\x80\x9d/
Run Code Online (Sandbox Code Playgroud)

我设法通过在httpd.conf中注释掉这一行来找到解决方法

#LoadModule hfs_apple_module libexec/apache2/mod_hfs_apple.so
Run Code Online (Sandbox Code Playgroud)

但是,我意识到这只是一个暂时的黑客,需要找到解决这个问题的方法.有人可以帮我吗?

似乎mod_hfs_apple2.c文件在文件名周围添加了\ xe2\x80\x9c(")和\ xe2\x80\x9d(").Unicode字符来自这里.这使得请求与DocumentRoot目录不同.

例如在我的httpd.conf中我有这个

DocumentRoot "/Users/Username/Sites"
Run Code Online (Sandbox Code Playgroud)

这是我跑完后发现的错误 tail error_log

[Mon Nov 18 19:51:35 2013] [error] [client ::1] mod_hfs_apple: Mis-cased URI or unacceptable Unicode in URI: /Users/Username/Sites/index.php, wants: /\xe2\x80\x9c/Users/Username/Sites/\xe2\x80\x9d/
Run Code Online (Sandbox Code Playgroud)

可以在这里找到mod_hfs_apple2.c .我不确定哪个版本附带了特立独行的当前操作系统.

现在我保持黑客攻击.

ble*_*ter 0

当 Apache 配置中指定的目录包含包含 Unicode 或大小写与文件系统中的实际名称不同的字符时,通常会出现此问题。目录名称可以出现在许多不同的位置,包括<Directory></Directory>标签,在您的情况下,是 DocumentRoot 指令。

您的情况的罪魁祸首似乎是您用来编辑 httpd.conf 的任何应用程序。它正在用智能引号替换双引号。然后,Apache 看到的不是带引号的字符串,而是不带引号的字符串,该字符串恰好以某种 unicode 开头和结尾。最终,它被传递到 mod_hfs_apple 上,它会抱怨,因为它无法将其与文件系统上的实际路径匹配。

解决方法:仅在应用程序中编辑 httpd.conf,这样当您超出 ASCII 字符集时就会很明显。如果您使用 BBEdit,请确保未启用首选项“使用印刷者的引号”。其次,确保配置中指定的任何目录的大小写与实际文件系统中的大小写匹配。