我正在研究设置重写以忽略 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
它会匹配TestDirectory
或TESTDIRECTORY
等,并且该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 子域名。)