Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htaccess从大写URL到小写URL_Php_Apache_.htaccess_Seo - Fatal编程技术网

Php htaccess从大写URL到小写URL

Php htaccess从大写URL到小写URL,php,apache,.htaccess,seo,Php,Apache,.htaccess,Seo,在一个网站上有文件夹产品,里面有一些大写的php文件 示例:www.Example.com/products/BIT-Defendar.php 现在,这个URL已经存在了很多年,并且遍布搜索引擎。这是产品经理的一个错误 但我想解决这个问题,我只需要小写的URL 这能解决我的问题吗检查拼写在上仅检查大小写在(1) 和与上述和有什么不同:(2) 如果我使用(1),那么我请求url小写或大写(但我会有搜索引擎问题吗?) 如果我使用(2)我必须将产品/文件夹中的所有文件重命名为小写 ----编辑---

在一个网站上有文件夹产品,里面有一些大写的php文件

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

现在,这个URL已经存在了很多年,并且遍布搜索引擎。这是产品经理的一个错误

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

这能解决我的问题吗<代码>检查拼写在
上仅检查大小写在
(1)

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

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

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

----编辑---

当我使用
RewriteRule
时,如果url为大写,我会被转移到域根目录,如果我使用
CheckSpelling
checkcaseonloy
则一切正常

我用
测试了,我得到:

RewriteCond %{REQUEST_URI} [A-Z]    
-这一条件得到满足

-满足此规则后,新url为${tolowercase:products/BIT Defendar.php}

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

我在
httpd.conf中的设置

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

重写映射到LowerCase int:tolower

使用CheckSpelling和/或CheckCaseOnly指令可能会导致意外结果,如底部所述:

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

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

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

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

我不明白您所指的是什么不希望的结果。如果你认为在线上提到了启用DAV的目录,我就不用了。问题是:使用这种重写,当url(www.example.com/products/NEW defender.php)为大写时,我会被重定向到主页。你的代码使我的整个网站崩溃了一秒钟,直到我将其删除。你可能需要将用户重定向到小写url,而不是重写。搜索引擎可以看到重定向,而不是重写。当我使用RewriteRule时,如果url是大写的,我会被转移到域根目录,如果我使用CheckSpelling和CheckCaseOnly,那么一切都很好。
<VirtualHost *:80>
 RewriteMap tolowercase int:tolower
</VirtualHost>
1, performance issues
2, some files might be skipped
3, some files might be misinterpreted
RewriteMap tolowercase int:tolower 
RewriteRule ^(.*)$ ${tolowercase:$1} [R=301,L]