最近我被迫从 cPanel 迁移到 CentOS Web Panel,并且文件名存在区分大小写的问题,因此在 url“filewhatever.jpg”中找不到“filewhatEver.jpg”(之前在 cPanel 中没有问题)。
此站点(共有 4 个托管)的 .htaccess 仅具有 WordPress 站点的基本配置:
RewriteEngine on
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
mod_rewrite 处于活动状态(在活动模块中列出),但是当我尝试时:
RewriteMap insensitive tolower:
RewriteRule ^[\/]*(.*)$ /${insensitive:$1} [R,L]
没有运气。编辑:给我一个“内部服务器错误”。
任何想法?
答案1
由于底层文件名是大小写混合的,因此您无法使用重写映射将请求转换为小写,因为仍然无法匹配。(顺便说一句,重写映射只能在主服务器配置中定义,而不能在 中定义.htaccess
。)
但是,您可以使用 mod_speling (one l
) 来实现不区分大小写的文件匹配。
您需要首先确保您的服务器上已启用 mod_speling。然后将以下指令添加到您的虚拟主机配置(或.htaccess
文件):
CheckSpelling on
CheckCaseOnly on
但请注意,使用 mod_speling 会产生额外的开销,并且找到文件时会触发外部重定向。重定向对于 SEO 来说是必要的,但如果您请求大小写混合的图像资源(这看起来是这样的?),则对服务器性能不利。
我认为 mod_speling 必须在您的旧 cPanel 服务器上默认启用,因为它默认情况下不区分大小写。
mod_speling 实际上只适用于来自外部站点的错误大小写请求。任何内部请求都应该被“修复”,以匹配底层文件的正确大小写。