使用 .htaccess 将大写的 URL 转换和重定向到小写

tin*_*tin 8 .htaccess redirect

我想使用该文件将带有大写字符的 URL 重定向http://localhost/A/B到小写版本。http://localhost/a/b.htaccess

使用正则表达式我可以捕获 A 和 B 但是否可以将它们转换为小写?

Gri*_*zly 10

在.htaccess中

<IfModule mod_speling.c>
CheckSpelling on
</IfModule>
Run Code Online (Sandbox Code Playgroud)

已测试,有效,如果您启用了 mod_speling。

或者,在服务器范围的 httpd.conf 中:

RewriteEngine On
RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
Run Code Online (Sandbox Code Playgroud)

来自:http : //www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/


MrW*_*ite 7

如果您使用的是 Apache 2.4,那么您可以在指令中.htaccess使用 mod_rewrite 和Apache 表达式RewriteCond来使用该tolower()函数。(您不再需要访问服务器配置来创建重写映射。)

例如,以下内容需要位于根.htaccess文件顶部附近:

RewriteEngine On

RewriteCond expr "tolower(%{REQUEST_URI}) =~ /(.*)/"
RewriteRule [A-Z] %1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

这会将任何包含大写字母的 URL 重定向/更正为相同的(全部小写)URL。

RewriteRule 模式 [A-Z]只是检查所请求的 URL 路径中至少有一个大写字母。RewriteCond然后该指令调用tolower()URL 路径(服务器变量)上的函数,然后使用 regex有效捕获REQUEST_URI其结果。/(.*)/

然后,替换字符串%1中的反向引用保存函数调用的结果(由捕获组在前面的条件中存储),即。小写的 URL 路径。值得注意的是,这包括斜杠前缀。tolower()

首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题,只有在确定其工作正常时才更改为 301(永久)。301 由浏览器持久缓存,因此可能会给测试带来问题。