我有这个小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处理程序。