0

我在 GitHub 上发布了一些网页代码,很多人使用它没有问题。但是,就在最近,有人联系我,让我知道他们遇到了图像无法正常显示的问题。该图像由 php 文件生成,我使用 .htaccess 重写在 URL 中将文件称为 .png,但在 Web 服务器上内部处理为 .php。

据我了解,apache 服务器默认情况下应在 URI 重写中包含原始查询字符串,但此人的 Web 服务器没有这样做。这是第一个报告该问题的人,我无法在我测试过的 Web 服务器上复制该问题。我不确定这个人的网络服务器环境。

这是用户报告的错误图像输出:
https ://freiezocker-clan.de/bf4stats/common/server-banner/image-banner.png?sid=1

上图中返回的结果表明需要服务器 ID。sid 在查询字符串中,但被忽略。在其他 Web 服务器上,它运行良好。

这是图像输出的样子(避免 .htaccess 重写时):
https ://freiezocker-clan.de/bf4stats/common/server-banner/image-banner.php?sid=1

这是我在用户报告问题之前的 .htaccess 实现:
RewriteEngine on
RewriteRule ^(.*)\.png $1.php [NC]

这是我尝试修复(没有成功)报告的问题:
RewriteEngine on
RewriteRule ^(.*)\.png $1.php?%{QUERY_STRING} [QSA,NC,L]

您能否向我解释为什么该用户的 Web 服务器不包含查询字符串和/或您能否帮助我实施一项更改,以纠正该用户的问题?

谢谢!

4

2 回答 2

0

用户的网络主机声明:

https://forum.myrcon.com/showthread.php?6854-BF4-Stats-webpage-for-XpKiller-s-Stats-Logger-Plugin-1-0-0-2-(Updated-2-18-2017 )&p=139086&viewfull=1#post139086

我的回复:

我真的希望他们能解释以下 .htaccess 代码的“过时”之处。比如,具体来说,什么?因为我在下面看不到任何“旧”的重写命令。以下所有“旧”命令在“新”2.4 文档中被列为完全有效。

RewriteEngine on
RewriteRule ^(.*)\.png $1.php [NC,L]

您的 Web 服务器正在按预期重写 URI;所以它正在工作。不起作用的部分是您的 Web 服务器正在切断查询字符串的末尾。他们能解释一下吗?

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

默认情况下,查询字符串会原封不动地传递。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号来指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要组合新旧查询字符串,请使用 [QSA] 标志。

所以,请问他们为什么他们的服务器没有像它所说的那样“默认”运行。

是因为我没有包括这些东西吗?

DocumentRoot "/var/www/example.com"
<Directory "/common/server-banner">
</Directory>

我当然希望不会。我希望每个目录的 .htaccess 文件不需要这些信息,并且可以毫无问题地了解它们的位置和范围。我无法包含丢失的信息,因为我无法猜测用户的 Web 服务器目录结构来确定 DocumentRoot,而且我无法猜测用户可能放置我的网页代码的子目录。

“旧”和“新” Apache 文档在这方面具有相同的要求,并且在“旧”服务器上运行良好;所以它也应该在“新”服务器上工作得很好。事实上,它在您的Web服务器上运行良好(它正在按预期重写文件名);只是您的网络服务器出于某种原因切断了查询字符串。

事实上,我测试的服务器版本是 Apache 版本 2.4.23;所以它是“新的”阿帕奇。请他们解释。

于 2017-04-17T00:03:41.410 回答
0

服务器主机已确定其 Web 服务器正在切断查询字符串,因为扩展名是 PNG,并且 PNG 图像具有查询字符串是不正常的。我同意PNG图像具有查询字符串是不正常的,但是扩展名必须是PNG,并且URL必须包含附加信息(因此我选择使用查询字符串)。奇怪的是,到目前为止,它在这么多不同的 Web 服务器上为这么多人工作得很好。

话虽如此,我将不得不重新考虑我的网页代码,以将附加信息包含在 URL 中的文件名中并从那里提取它。

https://forum.myrcon.com/showthread.php?6854&p=139120&viewfull=1#post139120

于 2017-04-20T19:03:39.160 回答