我必须使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]
或者类似的东西。