我正在努力解决htaccess问题。
我需要将所有网址从大写转换为小写。但是单独的查询字符串应该是相同的。
例如,
www.tESTUrl.com/sOMePath/?q=SomeStringHere
应转换为,
www.testurl.com/somepath/?q=SomeStringHere
请帮忙解决这个问题。提前谢谢。
答案 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