![Apache mod_speling 将所有 URL 重写为小写](https://linux22.com/image/779969/Apache%20mod_speling%20%E5%B0%86%E6%89%80%E6%9C%89%20URL%20%E9%87%8D%E5%86%99%E4%B8%BA%E5%B0%8F%E5%86%99.png)
我接手了一个网站,其中的 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)不知道重写。