How do I make URLs case insensitive in Linux server

不打扰是莪最后的温柔 提交于 2019-11-26 16:01:35

问题


I am working a website which is deployed on a Linux server. I have small changes to do on that. I have folder read. The requirement is that if I enter the URL localhost:80/tom/Read or ../READ or /read it needs to navigate to read.php inside a read folder.

I created a file .htaccess under a root directory. Placed following code mention below in the file by seeing the page 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]

But it is not working.

I am new to Linux environment. I don't know about mod_speling. Is that a file? Where it will be located in Linux server?


回答1:


You can easily make the apache webserver ignore the case by using the mod_speling module, which is part of the standard apache distribution:

CheckSpelling On
CheckCaseOnly On

After restarting httpd you can access read as Read or READ or read.




回答2:


Hi I got the solution finally. Placed the below code in /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so

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

Then restart httpd:

sudo service httpd restart

And finally verify it is enabled:

sudo httpd -M | grep speling

That should yield speling_module (shared)

Thanks for the help for all..




回答3:


First install speling_module. Then include LoadModule speling_module modules/mod_speling.so in httpd.conf file and then include

<IfModule mod_speling.c>
     CheckSpelling On
     CheckCaseOnly On
</IfModule>
in httpd.conf, then restart httpd service using service httpd restart command.




回答4:


Hi not sure if this helps but this is the simple workabout i have used, it uses a very basic php page but it works for the site i needed it to.

Place this code in the htaccess file

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

I have then created a php file wit the following..

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

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

Basically it gets the referring url -> stores as $aurl

it then makes it lowercase -> stores as $lurl

if they are not matching it then trys to display the lowercase url ($lurl)

If that fails the page does not exist, the refering url is now the same ( $lurl == $aurl ) so it then redirects to a proper 404 page or can display some extra code..



来源:https://stackoverflow.com/questions/14814419/how-do-i-make-urls-case-insensitive-in-linux-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!