如何在Linux服务器中使URL不区分大小写

时间:2013-02-11 14:44:47

标签: apache .htaccess mod-rewrite mod-speling

我正在使用部署在Linux服务器上的网站。我对此做了一些小改动。我有文件夹read。要求是,如果我输入网址localhost:80/tom/Read../READ/read,则需要导航到read.php文件夹中的read

我在根目录下创建了一个.htaccess文件。通过查看页面mentioned here

,将以下代码放在文件中
RewriteEngine On
RewriteBase /tom/

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

RewriteRule ![A-Z] - [S=26]
RewriteRule ^(.*)(A)(.*)$ $1a$3 [N,R=301]
RewriteRule ^(.*)(B)(.*)$ $1b$3 [N,R=301]
RewriteRule ^(.*)(C)(.*)$ $1c$3 [N,R=301]
RewriteRule ^(.*)(D)(.*)$ $1d$3 [N,R=301]
RewriteRule ^(.*)(E)(.*)$ $1e$3 [N,R=301]
RewriteRule ^(.*)(F)(.*)$ $1f$3 [N,R=301]
RewriteRule ^(.*)(G)(.*)$ $1g$3 [N,R=301]
RewriteRule ^(.*)(H)(.*)$ $1h$3 [N,R=301]
RewriteRule ^(.*)(I)(.*)$ $1i$3 [N,R=301]
RewriteRule ^(.*)(J)(.*)$ $1j$3 [N,R=301]
RewriteRule ^(.*)(K)(.*)$ $1k$3 [N,R=301]
RewriteRule ^(.*)(L)(.*)$ $1l$3 [N,R=301]
RewriteRule ^(.*)(M)(.*)$ $1m$3 [N,R=301]
RewriteRule ^(.*)(N)(.*)$ $1n$3 [N,R=301]
RewriteRule ^(.*)(O)(.*)$ $1o$3 [N,R=301]
RewriteRule ^(.*)(P)(.*)$ $1p$3 [N,R=301]
RewriteRule ^(.*)(Q)(.*)$ $1q$3 [N,R=301]
RewriteRule ^(.*)(R)(.*)$ $1r$3 [N,R=301]
RewriteRule ^(.*)(S)(.*)$ $1s$3 [N,R=301]
RewriteRule ^(.*)(T)(.*)$ $1t$3 [N,R=301]
RewriteRule ^(.*)(U)(.*)$ $1u$3 [N,R=301]
RewriteRule ^(.*)(V)(.*)$ $1v$3 [N,R=301]
RewriteRule ^(.*)(W)(.*)$ $1w$3 [N,R=301]
RewriteRule ^(.*)(X)(.*)$ $1x$3 [N,R=301]
RewriteRule ^(.*)(Y)(.*)$ $1y$3 [N,R=301]
RewriteRule ^(.*)(Z)(.*)$ $1z$3 [N,R=301]

但它没有用。

我是Linux环境的新手。我不知道mod_speling。那是一个档案吗?它将位于Linux服务器中的哪个位置?

4 个答案:

答案 0 :(得分:29)

您可以使用mod_speling模块轻松地使apache webserver忽略大小写,这是标准apache发行版的一部分:

CheckSpelling On
CheckCaseOnly On

重新启动httpd后,您可以readReadREAD访问read

答案 1 :(得分:25)

嗨,我终于得到了解决方案。将以下代码放在/etc/httpd/conf/httpd.conf

LoadModule speling_module modules/mod_speling.so

<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>

然后重启httpd:

sudo service httpd restart

最后确认它已启用:

sudo httpd -M | grep speling

这应该产生speling_module (shared)

感谢所有人的帮助..

答案 2 :(得分:2)

首先安装speling_module。 然后在httpd.conf文件中包含 LoadModule speling_module modules/mod_speling.so ,然后包含 的

<IfModule mod_speling.c>
     CheckSpelling On
     CheckCaseOnly On
</IfModule>
在httpd.conf中,然后使用 service httpd restart 命令重新启动httpd服务。

答案 3 :(得分:1)

你好不确定这是否有帮助,但这是我用过的简单工作,它使用了一个非常基本的php页面,但它适用于我需要它的网站。

将此代码放在htaccess文件中

 AddType application/x-httpd-php .html .htm
 ErrorDocument 404 /404.php

然后我创建了一个带有以下内容的php文件..

 <?php
 $aurl = $_SERVER['REQUEST_URI'];
 $lurl = strtolower($aurl);

 if($aurl != $lurl){
header('location:'.$lurl);
 } else {
header('location:/404.html');
 }
 ?>

基本上它会获得引用网址 - &gt;商店为$ aurl

然后将其设为小写 - &gt;商店为$ lurl

如果它们不匹配,则尝试显示小写网址($ lurl)

如果失败则页面不存在,引用网址现在相同($ lurl == $ aurl) 所以它然后重定向到一个合适的404页面或者可以显示一些额外的代码..