PHP htaccess将查询字符串从大写重写为小写的重定向url

我有这个小的PHP脚本和htaccess中的几行来重定向url,查询字符串从大写到小写.

但是,只有在url文件或url的目录部分中有大写字符时,它才会将查询字符串中的大写字符重定向为小写字符.

大写目录示例:

domain.com/JOBS/?position=Java+Developer

将被重定向到

domain.com/jobs/?position=java+developer

目录或文件名中没有大写但仅在查询字符串中的示例:

domain.com/jobs/?position=Java+Developer

将被重定向到

domain.com/jobs/?position=Java+Developer

第一个示例成功将目录和查询字符串重定向为全部小写.

第二个示例不将查询字符串重定向为小写,它保持不变.

无论目录或文件名是否为大写,我都无法弄清楚代码中要更改的内容以使查询字符串重定向到小写.

这是代码:

htaccess的

RewriteEngine On

RewriteBase /

# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

PHP脚本

<?php
if(isset($_GET['rewrite-strtolower-url'])) {
    $url = $_GET['rewrite-strtolower-url'];
    unset($_GET['rewrite-strtolower-url']);
    $params = http_build_query($_GET);
    if(strlen($params)) {
        $params = '?' . strtolower($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.');
?>
最佳答案
代替:

$params = http_build_query($_GET);

像这样用它:

$params = strtolower ( http_build_query($_GET) );

你的.htaccess应该是:

RewriteEngine On
RewriteBase /

# force url to lowercase if upper case is found
RewriteCond %{REQUEST_URI} [A-Z] [OR]
RewriteCond %{QUERY_STRING} [A-Z]
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L,NE]

因为您应该为这两种情况调用PHP处理程序.

转载注明原文:PHP htaccess将查询字符串从大写重写为小写的重定向url - 代码日志