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 On
CheckCaseOnly On
(1)
和上面提到的有什么不同和:(2)
RewriteMap tolowercase int:tolower
RewriteRule ^(.*)$ $tolowercase:$1
如果我使用 (1),那么我请求 url 小写或大写 (但我会遇到搜索引擎问题吗?)
如果我使用 (2),我必须将 products/ 文件夹内的所有文件重命名为小写。
---- 编辑----
当我使用 RewriteRule
时,如果 url 是大写的,我会转移到域根目录,如果我使用 CheckSpelling
和 CheckCaseOnly
,那么一切都很好。
我已经 用 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 被大写,如果我使用 CheckSpelling 和 CheckCaseOnly,我会转移到域根目录那么一切都好。 【参考方案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 重定向