Web 服务器在执行 .htaccess URI 重写时不包含查询字符串



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

我的理解是,默认情况下,apache服务器应该在URI重写中包含原始查询字符串,但是此人的Web服务器没有这样做。 这是第一个报告问题的人,我无法在我测试过的 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 服务器不包含查询字符串和/或您能否帮助我实施一项更改以纠正该用户的问题?

谢谢!

用户的虚拟主机表示:

https://forum.myrcon.com/showthread.php?6854-BF4-统计网页-为-XpKiller-s-统计-记录器插件-1-0-0-2-(更新-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 服务器上运行良好(它按预期重写文件名);只是您的 Web 服务器出于某种原因切断了查询字符串。

事实上,我测试的服务器版本是Apache版本2.4.23;所以它是"新"Apache。 请让他们解释。

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

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

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

最新更新