使url不区分大小写时出错

时间:2012-01-19 04:06:11

标签: php .htaccess

我必须使url非case sentitive.Now它显示错误404 not found

所以我包含.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找不到错误。但是如果我们在网址中放入小写,它会重定向到主页。想法?

2 个答案:

答案 0 :(得分:1)

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

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

我不推荐它,而是会向用户推荐一个带有建议类似页面的404。

答案 1 :(得分:0)

另一个替代方案是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]

或类似的东西。