htaccess大写URL到小写

时间:2012-11-30 18:59:39

标签: php apache .htaccess seo

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

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

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

但我想解决这个问题,我只想要小写的网址。

这会解决我的问题吗? CheckSpelling On CheckCaseOnly On (1)

与上面提到的有什么不同并且:(2)

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

如果我使用(1),那么所有工作都会枯萎我请求网址较低或大写(但我会遇到搜索引擎问题吗?)

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

----编辑----

当我使用RewriteRule时,如果网址为大写,我会转移到域根目录,如果我使用CheckSpellingCheckCaseOnly,那么一切正常。

我已经使用 this测试了,我得到了:

RewriteCond %{REQUEST_URI} [A-Z]    

- 满足此条件

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

- 符合此规则,新网址为http://www.example.com/ $ {tolowercase:products / BIT-Defendar.php}

- 由于RewriteRule选项中的R,测试停止了。将使用状态代码301

进行重定向

我在httpd.conf中的设置:

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

1 个答案:

答案 0 :(得分:3)

使用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]

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