htaccess 大写 URL 转小写

Posted

技术标签:

【中文标题】htaccess 大写 URL 转小写【英文标题】:htaccess Uppercase URL to lowercase 【发布时间】:2012-11-19 00:55:22 【问题描述】:

在网站上有一个文件夹products/,里面是带有一些大写字符的php文件。

示例: www.example.com/products/BIT-Defendar.php

现在这个网址已经存在多年并且遍布搜索引擎。这是产品经理的错误。

但我想解决这个问题,我只需要小写 URL。

这能解决我的问题吗? CheckSpelling OnCheckCaseOnly On(1)

和上面提到的有什么不同和:(2)

RewriteMap tolowercase int:tolower 
RewriteRule ^(.*)$ $tolowercase:$1

如果我使用 (1),那么我请求 url 小写或大写 (但我会遇到搜索引擎问题吗?)

如果我使用 (2),我必须将 products/ 文件夹内的所有文件重命名为小写。

---- 编辑----

当我使用 RewriteRule 时,如果 url 是大写的,我会转移到域根目录,如果我使用 CheckSpellingCheckCaseOnly,那么一切都很好。

我已经 this 进行了测试,我得到了:

RewriteCond %REQUEST_URI [A-Z]    

- 满足这个条件

RewriteRule (.*) $tolowercase:$1 [R=301,L]    

- 符合这条规则,新的 url 是 http://www.example.com/$tolowercase:products/BIT-Defendar.php

- 由于 RewriteRule 选项中的 R,测试已停止。将使用状态码 301 进行重定向

我在httpd.conf中的设置:

<VirtualHost *:80>
 RewriteMap tolowercase int:tolower
</VirtualHost>

【问题讨论】:

您可能需要将用户重定向到小写 URL 而不是重写。搜索引擎可以看到重定向,而不是重写。 当我使用 RewriteRule 时,如果 url 被大写,如果我使用 CheckSpellingCheckCaseOnly,我会转移到域根目录那么一切都好。 【参考方案1】:

使用 CheckSpelling 和/或 CheckCaseOnly 指令可能会导致不希望的结果,如底部here 所述:

1, performance issues
2, some files might be skipped
3, some files might be misinterpreted

我认为允许 apache 为您进行更正是不明智的,因为您依赖 apache 搜索目录和文件以进行每次查找,而使用小写映射,它可以让您完全控制并创建严格的标准.

我建议添加一个标志[R=301],它会通知搜索引擎这是新文件,您不会遇到任何与搜索引擎相关的问题:

RewriteMap tolowercase int:tolower 
RewriteRule ^(.*)$ $tolowercase:$1 [R=301,L]

您必须重命名文件,因为它们将不再被识别,但您可以编写一个简单的脚本来扫描所有文件,并将它们重命名为小写。

【讨论】:

我不明白您指的是什么不受欢迎的结果。如果您认为在线提到 启用 DAV 的目录,我不会使用它。 问题是:当 url(www.example.com/products/NEW-defender.php) 大写时,使用此重写我被重定向到主页 你的代码让我的整个网站崩溃了一秒钟,直到我删除它

以上是关于htaccess 大写 URL 转小写的主要内容,如果未能解决你的问题,请参考以下文章

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

不区分大小写的htaccess 301 [关闭]

在 XAMPP 中使用 .htaccess local 重写 URL

带有查询字符串的 URL 重定向 - htaccess

JS大写转小写小写转大写,JS字符串大小写互换

将字符串中大写转小写,小写转大写