使url不区分大小写时出错


error while making url non casesensitive

我必须使url不区分大小写。现在它显示错误404未找到

所以我包含了.htaccess文件,并在中包含了以下代码

ErrorDocument 404 /404.php

还包括404.php,并包括以下代码

$lower = strtolower($_SERVER['REQUEST_URI']); 
$new = 'http://' . $_SERVER['HTTP_HOST'] . $lower;
if (file_exists(ltrim($lower, '/')) && $_SERVER['PHP_SELF'] != $lower)
{ 
    header("Location: $new"); 
    exit; 
} 
else 
{ 
    echo 'Page not found'; 
}

现在它没有显示404未找到的错误。但是如果我们在url中放小写字母,它会重定向到主页。有什么想法吗?

要使Apache的行为不区分大小写,您应该使用以下设置:

 // on httpd.conf
 LoadModule speling_module modules/mod_speling.so
 CheckCaseOnly on

我不会推荐它,而是向用户抛出一个404,并建议使用类似的页面。

另一种选择是RewriteMap规则,它可以为您的传入路径小写。看见http://httpd.apache.org/docs/2.3/rewrite/rewritemap.html#int(2.2版也应提供)。

你基本上只需要检查URL是否存在,否则小写:

RewriteEngine On
RewriteMap lowercase int:tolower
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule (.+) ${lowercase:$1} [R]

或者类似的东西。