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

son*_*ita 17 apache .htaccess mod-rewrite mod-speling

我正在使用部署在Linux服务器上的网站.我对此做了一些小改动.我有文件夹read.要求是,如果我输入网址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]
Run Code Online (Sandbox Code Playgroud)

但它没有用.

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

hoe*_*eni 30

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

CheckSpelling On
CheckCaseOnly On
Run Code Online (Sandbox Code Playgroud)

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

  • 我是唯一一个发现讽刺的是,检查拼写的模块是拼写错误的吗? (27认同)
  • @Dave:这是非常有意的:https://httpd.apache.org/docs/2.4/mod/mod_speling.html#comment_6522 (2认同)

son*_*ita 27

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

LoadModule speling_module modules/mod_speling.so

<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>
Run Code Online (Sandbox Code Playgroud)

然后重启httpd:

sudo service httpd restart
Run Code Online (Sandbox Code Playgroud)

最后验证它已启用:

sudo httpd -M | grep speling
Run Code Online (Sandbox Code Playgroud)

那会产生 speling_module (shared)

感谢所有人的帮助..

  • 默认情况下,Debian(也可能是Ubuntu)似乎没有启用`speling`模块.要启用它,请使用命令`sudo a2enmod speling`. (4认同)
  • 我认为拼写错误的模块绝对太棒了. (3认同)

Pha*_*ati 5

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

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