我需要使访问服务器上的目录不区分大小写。
我如何使用 htaccess 做到这一点?
您必须在 apache 中安装并启用 mod_speling 模块,并在 .htaccess 中将 CheckCaseOnly 指令设置为 On
CheckCaseOnly On
如果您希望请求的 URL 无论使用大写还是小写字母都有效,请使用 mod_speling 使 URL 不区分大小写。在 .htaccess 文件中写入以下代码:
CheckSpelling On
这是我使用的,因为我的主机是共享的,不包括 mod_spelling 模块,但支持 .htaccess,但这仅适用于一个文件夹:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^student-government/$ http://www.tombarrasso.com/Student-Government/ [R=302,NC,L]
要重定向到的文件夹可以是任何大小写,因此您可以使用小写文件夹并在那里重定向所有拼写变体。
我想它可以用一点 REGEX 来适应所有文件夹,而不仅仅是一个。这在 Apache 2.2.14 (Unix) 上对我有用。
解决方案 1:为了使请求的 URL 的目录和文件名不区分大小写,我们可以在应用程序的 .htaccess 文件中添加以下两行:
<IfModule mod_speling.c>
#Once enabled, mod_speling redirects misspelled requests to any nearest matching resources. Uses a bit of memory, but can be useful if you've been changing URIs or have lots of similarly named URIs:
CheckSpelling On
CheckCaseOnly on
</IfModule>
解决方案 2: 同样,如果我们只想将几个预定义目录转到特定目录,则应用以下行:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^my-dir/old-dir-1/$ /my-dir/new-dir-1/ [R=301,L,NE]
RewriteRule ^my-dir/old-dir-2/$ /my-dir/new-dir-2/ [R=301,L,NE]
RewriteRule ^my-dir/old-dir-3/$ /my-dir/new-dir-3/ [R=301,L,NE]
# For any case insensitive directories we can try adding NO-CASE (NC)
RewriteRule ^My-Old-Dir/$ /my-new-dir/ [R=301,L,NC]
</IfModule>