将大写 URL 重定向到小写,除了 *** - htaccess

Posted

技术标签:

【中文标题】将大写 URL 重定向到小写,除了 *** - htaccess【英文标题】:Redirect uppercase URL's to lowercase except *** - htaccess 【发布时间】:2016-05-23 09:19:25 【问题描述】:

我正在尝试将大写的 URL 重定向到小写,但对它来说有点噩梦! (主要是因为我缺乏.htaccess 知识!)

目前我有:

<IfModule mod_speling.c>
CheckSpelling on
</IfModule>

RewriteEngine On
RewriteMap  lc int:tolower
RewriteCond %REQUEST_URI [A-Z]
RewriteRule (.*) $lc:$1 [R=301,L]

这很好用,但我使用的 CMS 将分页链接放在 URL 中,例如 http://website.com/blog/P8http://website.com/blog/P10 并且因为 URL 有一个大写的 P(这似乎是必需的)它们是 404 或 301 重定向.

我是否可以添加一条规则以使其不接收具有P 并在其后立即至少有一个数字字符的 URL 段?可能是正则表达式?

任何帮助将不胜感激!

【问题讨论】:

我可以理解让 URL 看起来非常漂亮的愿望,但是强迫用户每次在您的博客中打开一个页面时都发出两个请求是否足够重要? 我不关注?你的意思是因为它会检查两次?理论上是的...因为 URL 的两个版本(大写和小写)对 SEO 非常不利 - 不确定我是否理解:您的 CMS 正在创建像 /blog/P8 这样的 URL,您希望它们变成 /blog/p8,对吗?我的论点是保留 URL 大写而不打扰。您最初更改 URL 的原因是什么? 当然,但您不会使用任何大写版本,是吗?在网络上到处都有小写版本,你不必为大写而烦恼。 不,我想为 /blog/P8 等 URL 添加一个例外,因此它永远不会改变大小写(或者,只允许大写) 【参考方案1】:

你可以像这样创建一个异常:

RewriteEngine On

RewriteMap lc int:tolower

RewriteCond %REQUEST_URI [A-Z]
RewriteCond %REQUEST_URI !/P\d+/?$ [NC] 
RewriteRule (.*) $lc:$1 [R=301,L]

或使用负前瞻:

RewriteCond %REQUEST_URI [A-Z]
RewriteRule ^(?!.*/P\d+/?$)(.*)$ $lc:$1 [R=301,L]

【讨论】:

太棒了,第一个很有魅力! :) 谢谢。

以上是关于将大写 URL 重定向到小写,除了 *** - htaccess的主要内容,如果未能解决你的问题,请参考以下文章

Htaccess - 将下划线结合到连字符和大写到小写 301 重定向

将 asp.net core 2.0 url 重定向为小写

htaccess 重定向到 HTTPS,除了几个 url

nginx不区分大小写的url重定向[关闭]

将长 URL 重定向到 https

如何通过编辑htaccess文件将URL重定向到新URL