问题描述
我有以下非常简单的htaccess文件:
RewriteEngine On
RewriteRule a.jpg b.jpg
RewriteRule c.php d.php
所有四个资源都在根文件夹中。
PHP规则可以按预期工作,但是,将忽略JPG规则,就像它不在那里一样。图片a.jpg继续显示。
我完全不知道为什么会发生这种情况。
我能想到的唯一解释是,如果请求的资源是映像,则Apache会以某种方式完全不调用htaccess。那有可能吗?
解决方法
我找出了原因,并且在有人遇到相同问题的情况下发布了答案。
似乎在服务器上同时配置了Nginx和Apache。 Nginx是面向互联网的,而Apache是内部的。
看来Web托管公司这样做是为了从Nginx的更好性能中受益,并同时向来自Apache环境的任何人提供兼容性。
当Nginx从互联网接收到PHP请求时,它允许请求通过并到达Apache,但是当资源是静态资源(图像,css,js)时,Nginx会自行提供资源以实现最佳性能。
上面的htaccess图片规则未得到处理,因为请求甚至没有到达Apache。
我暂时不允许Nginx自行处理图像并允许它们继续处理Apache,从而解决了这个问题。
当然,更好的解决方案是删除htaccess依赖关系并处理Nginx配置文件中的所有内容,这将在不久后完成。
最好的解决方案当然是完全删除Apache,但这是一台共享服务器,我没有完全控制权。