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

问题描述 投票:0回答:4

我正在开发一个部署在 Linux 服务器上的网站。我对此需要做一些小的改变。我有文件夹

read
。要求是,如果我输入 URL
localhost:80/tom/Read
../READ
/read
,它需要导航到
read.php
文件夹内的
read

我在根目录下创建了一个文件.htaccess。通过查看此处提到的页面,将下面提到的代码放入文件中

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 服务器中的哪个位置?

apache .htaccess mod-rewrite mod-speling
4个回答
37
投票
您可以使用

mod_speling 模块轻松使 apache Web 服务器忽略大小写,该模块是标准 apache 发行版的一部分:

CheckSpelling On CheckCaseOnly On

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

read

 作为 
Read
READ
read


34
投票
我终于找到了解决方案。将以下代码放入

/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)


5
投票
首先安装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 服务。


0
投票
嗨,不确定这是否有帮助,但这是我使用过的简单解决方案,它使用一个非常基本的 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'); } ?>

基本上它获取引用 url -> 存储为 $aurl

然后将其变为小写 -> 存储为 $lurl

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

如果失败,页面不存在,则引用 url 现在是相同的 ( $lurl == $aurl ) 因此它会重定向到正确的 404 页面或者可以显示一些额外的代码..

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.