web-dev-qa-db-fra.com

Comment rendre les URL insensibles à la casse sur un serveur Linux

Je travaille un site Web qui est déployé sur un serveur Linux. J'ai de petits changements à faire là-dessus. J'ai le dossier read. La condition est que si j'entre l'URL localhost:80/tom/Read ou ../READ ou /read il doit naviguer vers read.php dans un dossier read.

J'ai créé un fichier .htaccess sous un répertoire racine. Placé le code suivant mentionné ci-dessous dans le fichier en voyant la page mentionné ici

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]

Mais ça ne marche pas.

Je suis nouveau dans l'environnement Linux. Je ne connais pas mod_speling. Est-ce un fichier? Où sera-t-il situé sur le serveur Linux?

17
sonorita

Vous pouvez facilement faire en sorte que le serveur Web Apache ignore la casse en utilisant le module mod_speling , qui fait partie de la distribution Apache standard:

CheckSpelling On
CheckCaseOnly On

Après avoir redémarré httpd, vous pouvez accéder à read en tant que Read ou READ ou read.

30
hoeni

Salut, j'ai enfin la solution. Placer le code ci-dessous dans /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so

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

Redémarrez ensuite httpd:

Sudo service httpd restart

Et enfin, vérifiez qu'il est activé:

Sudo httpd -M | grep speling

Cela devrait donner speling_module (shared)

Merci pour l'aide pour tous ..

27
sonorita

Salut je ne sais pas si cela aide, mais c'est le workabout simple que j'ai utilisé, il utilise une page php très basique mais cela fonctionne pour le site dont j'avais besoin.

Placez ce code dans le fichier htaccess

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

J'ai ensuite créé un fichier php avec ce qui suit ..

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

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

Fondamentalement, il obtient l'URL de référence -> stocke comme $ aurl

il le fait alors en minuscules -> stocke sous $ lurl

s'ils ne le correspondent pas, essayez d'afficher l'url en minuscule ($ lurl)

Si cela échoue, la page n'existe pas, l'URL de référence est maintenant la même ($ lurl == $ aurl) donc elle redirige ensuite vers une page 404 appropriée ou peut afficher du code supplémentaire.

1
South Coast Web