区分大小写的目录的重写规则

区分大小写的目录的重写规则

我正在研究设置重写以忽略 URL 目录名称的大小写。

例如,我有

example.com/TestDirectory

我想忽略大小写,这样 URL 仍然会指向

example.com/testdirectory

这是我所拥有的,但它似乎不起作用:

# rewrite rules for example.com/TestDirectory
RewriteCond %{http_host} ^example\.com [NC,OR]
RewriteCond %{http_host} ^www\.example\.com\TestDirectory [NC]
RewriteRule $ http://www.example.ccom/testdirectory/

我是否遗漏了某一步骤?

答案1

为了实现规范重定向到正确大小写的目录(在本例中,全部小写),您可以执行以下操作:

RewriteCond %{REQUEST_URI} !^/testdirectory
RewriteRule ^testdirectory /testdirectory/ [NC,R,L]

NC上的( nocase) 标志确保RewriteRule它会匹配TestDirectoryTESTDIRECTORY等,并且该RewriteCond指令通过检查我们是否已经testdirectory通过区分大小写的匹配来防止重定向循环。

但是,这只会重定向到目录。目录名后面的任何文件都会丢失。为了重定向/TestDirectory/<whatever>/testdirectory/<whatever>,请尝试以下操作:

RewriteCond %{REQUEST_URI} !^/testdirectory
RewriteRule ^testdirectory/?(.*) /testdirectory/$1 [NC,R,L]

请注意,这是临时 (302) 重定向。如果要将其设为永久重定向,请将R标志更改为,但前提是您必须检查其是否正常工作。R=301

RewriteCond %{http_host} ^www\.example\.com\TestDirectory [NC]

请注意,HTTP_HOST服务器变量仅包含请求的主机名。没有 URL 路径信息。如果您还需要检查主机(如果您有多个域),则请添加一个附加条件:

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]

(假设该域名已经规范化,包含 www 子域名。)

相关内容