【发布时间】:2014-01-14 20:09:01
【问题描述】:
我正在寻求有关以下问题的帮助,该问题今天一直困扰着我。我目前正在构建一个 wiki,目前正在使用以下规范:
操作系统:Windows XP x86 媒体维基 1.19.1 阿帕奇 2.4.2 PHP 5.4.4 MySQL 5.5.25a phpMyAdmin 3.5.2 PHP缓存3.1.14.TS.VS9.X86.XP
我前段时间为 wiki 配置了图像验证,它必须运行良好。
这是按照通常的程序完成的:
- 我修改了 $wgUploadPath 值为 "= "/wiki/img_auth.php";"
- 我在“/wiki/images”文件夹的 .htaccess 中添加了“全部拒绝”。
这具有修改图像 URL 并拒绝访问 /images 文件夹本身的预期效果。该 URL 现在是 "http://x.x.x.x/wiki/img_auth.php/f/f0/2012-12-07_071358.png",而不是 "http://x.x.x.x/bawiki/images/f/f0/2012-12-07_071358.png"。
但是,本周早些时候情况发生了变化,我不知道为什么或如何。图像已从 wiki 中消失。导航到页面http://x.x.x.x./wiki/index.php/File:2012-12-07_071358.png,然后导航到图像本身会带来两个问题:
- 在 Firefox 中,虽然 URL 正确显示为
"http://x.x.x.x/wiki/index.php/File:2012-12-07_071358.png",但显示以下消息:无法显示图像"http://x.x.x.x/wiki/img_aug.php/f/f0/2012-12-07_071358.png",因为它包含错误 - 在 IE 中,图像仅显示为“红色 X”。
这发生在:
- .jpg 文件、.png 文件、.tif/tiff 文件、.bmp 文件(至少)。
其他文件类型,如 .PDF、.AVI、.7Z 等,均由 wiki 正确提供。
所有图像在服务器上仍然正常可用;我可以直接在服务器上打开它们中的任何一个(所以我知道它们实际上并不包含错误)。我还可以查看 wiki 上未使用图像身份验证的任何其他图像(例如徽标)。
我安装了 Firebug 并在加载图像时查看了结果:
请求头是:
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control max-age=0
Connection keep-alive
Cookie wikiUserName=username; wikiUserID=1; wiki_session=f67501dd979ec4f4939251b1bf9a9a5c
Host x.x.x.x
If-Modified-Since Fri, 02 Nov 2012 16:54:29 GMT
Referer http://x.x.x.x/wiki/index.php/File:2012-12-07_071358.png
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0
响应标头:
Cache-Control private
Connection close
Date Tue, 14 Jan 2014 20:00:18 GMT
Server Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4
Vary Cookie
图像请求的最终状态是“304 未修改”,将光标悬停在任何字段上都会显示:“加载给定 URL 失败”。
如果我通过在 .htaccess 中注释 $wgUploadPath 和“全部拒绝”来删除图像身份验证,我可以再次正确查看图像。但是,这不是我可以接受的配置。
我试图查找以前出现过的此类问题,但找不到任何具体的东西。任何人都可以提出解决方案吗?如果您希望我提供任何其他细节,我会尽力回答问题。
图片鉴权手册:http://www.mediawiki.org/wiki/Manual:Image_Authorization img_auth.php 脚本:http://pastebin.com/TDaZex9Y
【问题讨论】:
-
您是否在某处缺少 .htaccess 文件?您的浏览器端 url 与服务器报告的错误完全不对应,这意味着发生了重写(或者更确切地说,没有发生)。
-
对不起,我没有写正确的错误信息(我现在编辑了 OP)。错误消息指的是其中包含“img_auth.php”的 URL。我还添加了脚本的 pastebin。从我所见,我似乎没有错过 .htaccess。可能涉及的将是 htdocs/wiki 的 .htaccess,它本质上是所有人的允许,以及 htdocs/wiki/images 的 .htaccess,它是所有人的拒绝。然而,这个过程的重点是 /images 被设置为拒绝所有人,并且访问其内容的唯一方法是通过 img_auth.php
-
您是否启用了任何会导致 img_auth.php 转储错误消息的功能?诸如 PHP 警告之类的任何消息都会破坏本应是二进制数据输出的内容。您可以尝试直接导航到图片 URL,看看是否能注意到任何内容。
-
好吧,在其生产配置中激活了图像身份验证,我无法直接看到图像。该图像将位于“x.x.x.x/wiki/images/5/56/2012-12-07_063326.png”(示例文件),但此访问被 /images 中的 .htaccess 拒绝。现在,我可以删除那里的“全部拒绝”,它允许访问该文件夹。然后,虽然 img_auth.php URL 不起作用,但我实际上能够看到图像,这意味着服务器能够提供图像。
-
(跟进)。我认为问题可能出在 img_auth.php 本身,但我无法理解的是,如果 img_auth.php 出错,它应该显示另一条错误消息。我远非 php 专家,但它的代码显然包含错误检查。如果它确实返回了错误,它应该显示为函数 wfforbidden 返回的两个参数。
标签: php image apache mediawiki