Apache mod_speling 将所有 URL 重写为小写

Apache mod_speling 将所有 URL 重写为小写

我接手了一个网站,其中的 URL 包含大写字母,但服务器上的文件结构全部为小写。在将网站迁移到 Apache 之前,这一直不是问题。

我不想将现有页面重定向到小写结构,因为该网站已经老旧,并且在 Google 和 Bing 上的排名很好。

我已经通过以下方式在 .htaccess 中实现了 mod_speling:

<IfModule mod_speling.c>
    CheckCaseOnly on
    CheckSpelling on
</IfModule>

但是它会将所有 URL 重写为小写,在 Google 看来,这是一个新的 URL。

有没有什么方法可以让我将所有 URL 视为不区分大小写,同时保留原始 URL?

例如:domain.com/Folder1/folder.htm会解析到与 相同的位置吗domain.com/folder1/Folder.htm

答案1

你可以将mod_rewrite所有请求重写为小写。可能看起来像这样:

RewriteEngine On
RewriteMap lc int:tolower
RewriteRule ^(.*) ${lc:$1}

假设磁盘上有以下文件:

$ ls
file1.txt  file2.txt  file3.txt  index.html

这些链接位于index.html

<ul>
  <li><a href="File1.txt">File1</a></li>
  <li><a href="FILE2.txt">FILE2</a></li>
  <li><a href="file3.txt">file3</a></li>
</ul>

我展示的重写配置允许所有三个链接检索预期文件。重写不会生成任何类型的重定向到客户端,因此客户端(例如 Google)不知道重写。

相关内容