使用除查询字符串之外的htaccess将url转换为小写

时间:2014-06-03 13:40:37

标签: php .htaccess query-string lowercase

我正在努力解决htaccess问题。

我需要将所有网址从大写转换为小写。但是单独的查询字符串应该是相同的。

例如,

www.tESTUrl.com/sOMePath/?q=SomeStringHere

应转换为,

www.testurl.com/somepath/?q=SomeStringHere

请帮忙解决这个问题。提前谢谢。

4 个答案:

答案 0 :(得分:9)

首先你必须将它添加到你的httpd.conf:

RewriteMap lc int:tolower

然后将以下代码粘贴到.htaccess

RewriteEngine On
RewriteBase / 
RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}} [L,R=301]

此代码重写了来自

的网址

www.tESTUrl.com/sOMePath/?q=SomeStringHere

www.testurl.com/somepath/?q=SomeStringHere

答案 1 :(得分:2)

首先,您需要在httpd.conf中添加此行,以定义RewriteMap来处理小写转换:

RewriteMap lc int:tolower

然后在根目录中添加此规则.htaccess:

RewriteEngine On

RewriteRule ^(.*?[A-Z]+.*)$ /${lc:$1} [L,NE,R=302]

这不会影响QUERY_STRING

答案 2 :(得分:0)

我相信调整the answer given here可以处理等式的www.tESTUrl.com/主机名部分:

RewriteCond %{HTTP_HOST} !^(.+\.)?(.+)?$
RewriteRule ^(.*)$ ${lowercase:%{HTTP_HOST}}/$1 [R=301,L]

然后我相信这应该适用于sOMePath/路径:

RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*)/?(.*)$ ${lc:$1}/?q=$2 [R]

答案 3 :(得分:0)

RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].* [OR]
RewriteCond %{QUERY_STRING} ^[^A-Z]*[A-Z].*
RewriteRule ^ ${lc:%{REQUEST_URI}}?${QUERY_STRING} [L,R=301]

如果您希望将来小写查询字符串,则第二行不是必需的,但是很有帮助。我只是把它放在这里完成。

你必须将它添加到你的httpd.conf:

RewriteMap lc int:tolower