我有这个小的php脚本和htaccess中的几行来redirect查询string从大写到小写的url。
但是,只有在url文件或url的目录部分中有大写字母的情况下,才会将查询string中的大写字符redirect到小写字母。
大写字母目录示例:
domain.com/JOBS/?position=Java+Developer
将被redirect到
domain.com/jobs/?position=java+developer
目录或文件名中不含大写字母的示例,但仅在查询string中:
domain.com/jobs/?position=Java+Developer
将被redirect到
domain.com/jobs/?position=Java+Developer
第一个示例将目录和查询string成功redirect到全部小写。
第二个示例不会将查询stringredirect到小写,它保持不变。
我不知道如何改变代码来获取查询stringredirect到小写,无论目录或文件名是否大写。
这里是代码:
htaccess的
RewriteEngine On RewriteBase / # force url to lowercase if upper case is found RewriteCond %{REQUEST_URI} [AZ] 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} [AZ] [OR] RewriteCond %{QUERY_STRING} [AZ] RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L,NE]
既然你应该为这两种情况调用你的PHP处理程序。