3

在网站上有文件夹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一切正常。

我已经对此进行了测试 我得到:

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>
4

1 回答 1

3

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

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]

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

于 2012-11-30T19:06:46.413 回答