如果您不在共享主机环境中并且乐于将规则直接输入到您的 Apache 配置中,您可以使用 mod_rewrites RewriteMap 指令进行小写转换:
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*) ${lc:$1} [R]
有关这方面的更多信息,请参阅 Apache 手册:Redirect a URI to an all-lowercase version of itself。虽然那里注意到建议使用mod_speling 而不是这个重写规则。
使用 Apache 重写和 PHP:Taken from here
.htaccess
RewriteEngine on
RewriteBase /
# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
# ensure it is not a file on the drive first
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]
重写-strtolower.php
<?php
if(isset($_GET['rewrite-strtolower-url'])) {
$url = $_GET['rewrite-strtolower-url'];
unset($_GET['rewrite-strtolower-url']);
$params = strtolower(http_build_query($_GET));
if(strlen($params)) {
$params = '?' . $params;
}
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . strtolower($url) . $params, true, 301);
exit;
}
header("HTTP/1.0 404 Not Found");
die('Unable to convert the URL to lowercase. You must supply a URL to work upon.');
设置重写模块
检查传入的 URL 是否包含任何大写字母
确保传入的 URL 不引用磁盘上的文件(您可能希望托管名称中包含大写字母的文件 - 例如客户端通过您提供的 CMS 上传的 PDF 文件)
发送符合上述规则的所有请求,然后被重写到我们的脚本中,该脚本将实际转换为小写。
这里唯一需要注意的是 QSA 修饰符,它确保所有 GET “变量”都传递到脚本中
接下来是完成所有工作的 PHP 小 sn-p!
这是一个名为 rewrite-strtolower.php 的文件,位于与上述 .htaccess 文件相同的目录中。