在.htaccess文件中使用NC无法正常工作

时间:2012-08-19 19:50:42

标签: html .htaccess

我正在尝试创建一个忽略文件区分大小写的.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

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

1 个答案:

答案 0 :(得分: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未找到的错误。

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

RewriteMap lc int:tolower 

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

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

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

有关RewriteMap的更多信息=> see documentation