apache - ¿Cómo puedo hacer que las URL no tengan mayúsculas en el servidor Linux?
.htaccess mod-rewrite (4)
Estoy trabajando en un sitio web que se implementa en un servidor Linux. Tengo pequeños cambios que hacer en eso. He read
carpeta. El requisito es que si ingreso el URL localhost:80/tom/Read
o ../READ
o /read
, debe navegar a read.php
dentro de una carpeta de read
.
Creé un archivo .htaccess bajo un directorio raíz. Colocado después de mencionar el código a continuación en el archivo al ver la página mencionada aquí
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]
Pero no está funcionando.
Soy nuevo en el entorno Linux. No sé sobre mod_speling. ¿Es eso un archivo? ¿Dónde se ubicará en el servidor Linux?
Hola tengo la solución por fin Coloca el siguiente código en /etc/httpd/conf/httpd.conf
.
LoadModule speling_module modules/mod_speling.so
<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>
Luego reinicie httpd:
sudo service httpd restart
Y finalmente verificar que esté habilitado:
sudo httpd -M | grep speling
Eso debería producir speling_module (shared)
Gracias por la ayuda para todos ..
Hola, no estoy seguro de si esto ayuda, pero este es el trabajo simple que he usado, usa una página php muy básica pero funciona para el sitio en el que lo necesitaba.
Coloque este código en el archivo htaccess
AddType application/x-httpd-php .html .htm
ErrorDocument 404 /404.php
Luego he creado un archivo php con lo siguiente ...
<?php
$aurl = $_SERVER[''REQUEST_URI''];
$lurl = strtolower($aurl);
if($aurl != $lurl){
header(''location:''.$lurl);
} else {
header(''location:/404.html'');
}
?>
Básicamente obtiene la url de referencia -> almacena como $ aurl
luego lo hace en minúsculas -> almacena como $ lurl
si no lo coinciden, intente mostrar la url en minúsculas ($ lurl)
Si eso falla, la página no existe, la url de referencia ahora es la misma ($ lurl == $ aurl), por lo que luego redirige a una página 404 adecuada o puede mostrar algún código adicional ...
Primero instala speling_module. Luego incluya LoadModule speling_module modules/mod_speling.so
en el archivo httpd.conf y luego incluya
<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>
en httpd.conf, luego reinicie el servicio httpd usando el comando service httpd restart .
Puede hacer que el servidor web apache ignore el caso fácilmente utilizando el módulo mod_speling , que forma parte de la distribución estándar de apache:
CheckSpelling On
CheckCaseOnly On
Después de reiniciar httpd, puede acceder a read
como Read
o READ
o read
.