如何在PHP中将大写url查询字符串重定向为小写

如何在PHP中将大写url查询字符串重定向为小写,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,我最近在一个我正在开发的网站上更改了查询字符串中的URL参数,需要一种高效的PHP方法将所有搜索引擎索引的链接(其中包含查询字符串)从大写格式重定向到小写格式 以下是一个例子: http://computerhelpwanted.com/jobs/?occupation=Director&position=IT+Director 请注意,查询字符串参数的第一个字母是大写的,除了单词IT all uppercase。我需要重定向到URL的小写版本,这是网站现在使用的 我尝试了htacce

我最近在一个我正在开发的网站上更改了查询字符串中的URL参数,需要一种高效的PHP方法将所有搜索引擎索引的链接(其中包含查询字符串)从大写格式重定向到小写格式

以下是一个例子:

http://computerhelpwanted.com/jobs/?occupation=Director&position=IT+Director
请注意,查询字符串参数的第一个字母是大写的,除了单词IT all uppercase。我需要重定向到URL的小写版本,这是网站现在使用的

我尝试了htaccess+php解决方案,但它导致了太多问题。如果你有兴趣看这个脚本,这里有一个链接。还有关于stackoverflow的问题,当时我对它有意见

所以对于这个问题,如果可能的话,我只想坚持用纯PHP的方式来做。除非您知道在htaccess中不使用httpd.conf或映射或mod拼写的方法,因为我没有访问该方法的权限

感谢您的帮助

在纯PHP中

if(preg_match('~[A-Z]~', $_SERVER['REQUEST_URI'])) {
    header("Location: http://" . $_SERVER['HTTP_HOST'] . strtolower($_SERVER['REQUEST_URI']));
}
如果要永久重定向,请执行以下操作:

header(above thing, true, 301);

您可以尝试以下方法:

if ( $_SERVER['REQUEST_URI'] != strtolower ( $_SERVER['REQUEST_URI'] ) )
    header ('Location: //' . $_SERVER['HTTP_HOST'] . strtolower ( $_SERVER['REQUEST_URI'] ));

这将重定向到URI的小写版本,前提是它还没有小写。开始时的//被浏览器替换为实际的url模式。

这就是我要找的。我只更改了标题位置部分并去掉了尾随/因为它导致url中出现了两个尾随斜杠。我将其格式化为
标题('Location:http://'.$\u SERVER['http\u HOST'].strtolower($\u SERVER['REQUEST\u URI']),true,301)参考我对drmad的评论,哪种方式执行得更快?preg_match还是他的答案?这一个也有效,除了开头的尾随//使url结构在目录后有两个尾随斜杠。乔治使用了预匹配[A-Z]。你的方式和他的方式哪一种会更快?我不明白你说的“目录之后”是什么意思。所有主流浏览器都支持双斜杠,但我才知道它是(哦,令人惊讶)。另外,我认为RegExp比简单的字节比较慢。我使用你的建议是因为它更简单,而且切中要害。我的意思是在目录之后,文件夹,在这个例子中是/jobs/。很奇怪,嗯,是的。。这也破坏了我的网站。这比@Mike所说的还要糟糕