Htaccess - 将下划线结合到连字符和大写到小写 301 重定向
Posted
技术标签:
【中文标题】Htaccess - 将下划线结合到连字符和大写到小写 301 重定向【英文标题】:Htaccess - Combining underscore to hyphen and uppercase to lowercase 301 redirect 【发布时间】:2015-03-30 21:12:19 【问题描述】:目前我在我的网站上使用下划线连字符 301,这运行良好,但我还想将所有链接转换为小写,并将大写添加到小写重写。
我可以这样做,但使用当前方法它会执行以下操作,我认为这对 SEO 不是很好:
-
原始网址
301
已替换连字符
301
连字符小写 URL
如何将以下重写合并到一个查询中,以便通过 301 将带有下划线或大写的 url 转换为连字符和小写?
下划线改写连字符
RewriteRule ^post/([^_]*)_([^_]*_.*)$ /posts/new-category-1/$1-$2 [L,NE]
RewriteRule ^post/([^_]*)_([^_]*)$ /posts/new-category-1/$1-$2 [L,NE,R=301]
RewriteRule ^forum/([^_]*)_([^_]*_.*)$ /forums/new-category-1/$1-$2 [L,NE]
RewriteRule ^forum/([^_]*)_([^_]*)$ /forums/new-category-1/$1-$2 [L,NE,R=301]
大写到小写重写
httpd.conf
RewriteMap lc int:tolower
.htaccess
RewriteCond %REQUEST_URI ^[^A-Z]*[A-Z].*
RewriteRule ^ $lc:%REQUEST_URI [L,R=301]
【问题讨论】:
【参考方案1】:您可以通过以下规则避免多个301
:
RewriteRule ^(post|forum)/([^_]*)_([^_]*_.*)$ /$1/$2-$3 [L,NE]
# if there is any upper case letter then do both lowercase conversion AND
# underscore to hyphen replacement
RewriteCond %REQUEST_URI [A-Z]
RewriteRule ^(post|forum)/([^_]*)_([^_]*)$ /$lc:$1/$lc:$2-$lc:$3 [L,NE,R=301]
# otherwise regular underscore to hyphen replacement
RewriteRule ^(post|forum)/([^_]*)_([^_]*)$ /$1/$2-$3 [L,NE,R=301]
# and regular lower case conversion
RewriteRule ^(post|forum)/[^A-Z]*[A-Z] $lc:%REQUEST_URI [L,R=301]
【讨论】:
目前如果没有下划线,这允许大写字母? 似乎将/profiles/Person
重定向到/profiles/person
?最后一行似乎可以在任何 URL 上运行,而不仅仅是匹配的?
是否可以在(post|forum)
上只使用小写字母或在/profiles/name
上不使用小写字母?
刚上线所以错过了你的聊天。我没有在 URI 中添加 /category-1/
的任何规则。看起来你的其他规则是冲突的。确保在您的 .htaccess 中保留上述规则之后的其他规则,并在新浏览器中进行测试。此外,如果它不能解决,请打开一个新问题,因为从 cmets 部分了解复杂问题并不重要。
原来是我没有把RewriteMap lc int:tolower
放到新的vhost conf中以上是关于Htaccess - 将下划线结合到连字符和大写到小写 301 重定向的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess - 递归地将斜杠映射到下划线(内部重定向)
python实现将字符串中以大写字母开头的单词前面添加“_”下划线