1

我正在尝试创建一个忽略文件区分大小写的 .htaccess 文件。到目前为止,我有以下内容:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html

当我准确输入文件名时,这有效。例如,我的文件之一是 About.html。当我输入 www.domain.com/About 时,它会转到正确的位置,但是当我输入 www.domain.com/about 时,它不会。

我看过关于人们使用 [NC] 的帖子,但我也无法让它发挥作用。我也试过把

CaseInsensitive On

但这似乎破坏了一切(甚至无法加载主页),所以我把它拿出来了。有谁知道如何做到这一点?

4

1 回答 1

1

不区分大小写不会那样工作,它会激活正则表达式匹配的不区分大小写,而不是文件。

例如 :

RewriteRule ^somefile.php$ /index.php
RewriteRule ^somefile.php$ /index2.php [NC]

如果有人尝试访问http://domain.com/SomeFile.php,它将与第一行不匹配,但第二行将匹配,这会将他重定向到 index2.php(而不是 index.php)。但是,如果您将 index2.php 文件命名为 INDEX2.php,则重定向将引发 404 not found 错误。

您正在寻找的是使用 RewriteMap。你需要把它放在你的服务器配置文件中:

RewriteMap lc int:tolower 

重新启动 apache,并在您的 htacces 中使用如下规则:

RewriteRule ^(.*)$ /${lc:$1} 

这会将任何请求变为小写,然后您的文件必须全部小写。

有关 RewriteMap 的更多信息 =>参见文档

于 2012-08-19T20:36:34.657 回答