2012-11-30 42 views
2

在一个网站上有文件夹products/,里面有一些大写字母的php文件。htaccess大写的URL为小写

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

现在多年,各地的搜索引擎存在这个网址。这是产品经理的错误。

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

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

而且什么不同与上述和:(2)

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

如果使用(1)然后所有作品枯萎我请求URL下套管或大写的(但我有搜索引擎的问题?)

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

---- ----编辑

当我使用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> 
+0

您可能需要将用户重定向到小写URL而不是重写。搜索引擎可以看到重定向,而不是重写。 –

+0

当我使用* RewriteRule *我得到转移到域根目录如果url被超载,如果我使用* CheckSpelling *和* CheckCaseOnly *然后一切正常。 – FeRtoll

回答

3

使用CheckSpelling和/或CheckCaseOnly指令可能导致意外的结果,因为在底部here提到:

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

我认为这是不明智的,允许apache为你做出更正,因为你依靠apache来搜索目录和文件f或者每一次查找,而使用小写地图,它使您完全控制,并创建严格的标准。

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

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

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

+0

这不是我的问题。请阅读我的问题。 – FeRtoll

+0

我不明白你指的是什么*不希望的结果。如果你认为它提到了* DAV启用的目录*我不使用它。 – FeRtoll

+0

根据列出的3点不希望的结果。 –