我正在尝试创建一个忽略文件区分大小写的.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
但这似乎打破了一切(甚至无法加载主页),所以我把那一点拿出来。有没有人知道如何做到这一点?
答案 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