2013-02-11 13 views
15

Sto lavorando a un sito Web distribuito su un server Linux. Ho piccole modifiche da fare su questo. Ho la cartella read. Il requisito è che se inserisco l'URL localhost:80/tom/Read o ../READ o /read, è necessario spostarsi su read.php all'interno di una cartella read.Come rendere gli insiemi di maiuscole e minuscole degli URL nel server Linux

Ho creato un file .htaccess in una directory radice. Disposto il codice seguente dicitura in basso nel file per vedere la pagina di 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] 

Ma non sta funzionando.

Sono nuovo per l'ambiente Linux. Non so mod_speling. È un file? Dove si troverà nel server Linux?

+1

Vorrei mettere in discussione le specifiche qui. Ciò comporterebbe ulteriori problemi, ad esempio con l'indicizzazione dei bot. –

+0

possibile duplicato di [Case Insensitive URL con mod \ _rewrite] (http://stackoverflow.com/questions/1998156/case-insensitive-urls-with-mod-rewrite) –

+0

Sì, il requisito è probabile che sia un problema si. Detto questo, c'è un modulo Apache che può aiutare (è quello che può gestire le richieste che sono un po 'spente, e serve un'alternativa ... Ho dimenticato il nome) Modifica: è 'MultiViews' –

risposta

25

Si può facilmente rendere il webserver apache ignora il caso utilizzando il modulo mod_speling, che fa parte della distribuzione Apache standard:

CheckSpelling On 
CheckCaseOnly On 

Dopo aver riavviato httpd è possibile accedere read come Read o READ o read.

+0

Hi Hoeni .. Ho inserito il codice di riga 2 sopra in .htaccess con il codice già presente. Quindi riavviato. La sua non funziona. Qualsiasi suggerimento – sonorita

+0

Mi chiedo se ci sono alcune considerazioni sulle prestazioni quando si utilizza questo. Ho una grande app Sencha che ha questo problema. 390 MB di file tutti di maiuscole e referenziati in modo diverso in tutto .. –

+19

Sono l'unico che trova ironico che il modulo per controllare l'ortografia sia scritto in modo errato? – Dave

18

Ciao ho finalmente trovato la soluzione. Inserito il codice seguente in /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so 

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

Quindi riavviare httpd:

sudo service httpd restart 

E infine verificare che sia attivato:

sudo httpd -M | grep speling 

Questo dovrebbe produrre speling_module (shared)

Grazie per l'aiuto per tutti ..

+0

La direttiva IfModule non dovrebbe fare alcuna differenza, in quanto è solo per evitare errori quando si ** non ** ha il modulo caricato. (Http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule). In caso di errori senza di esso, il modulo mod_speling non viene caricato affatto. – hoeni

+2

Il modulo 'spelling' non sembra abilitato di default su Debian (probabilmente anche Ubuntu). Per abilitarlo usa il comando 'sudo a2enmod speling'. – Dave

+0

Penso che il modulo che viene digitato in modo errato sia assolutamente fantastico. – ScottMcGready

1

Ciao, non sono sicuro che questo aiuti, ma questo è il semplice workabout che ho usato, usa una pagina php molto semplice ma funziona per il sito in cui ne avevo bisogno.

inserire questo codice nel file .htaccess

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

ho quindi creato un file php ingegno seguente ..

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

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

In sostanza si ottiene l'URL di riferimento -> negozi da $ aurl

quindi lo rende in minuscolo -> memorizza come $ lurl

se essi quindi non riescono a visualizzare l'url minuscolo ($ lurl)

Se la pagina non esiste, l'URL di riferimento è ora lo stesso ($ lurl == $ aurl) quindi reindirizza a un corretta 404 pagina o può visualizzare qualche codice in più ..

+1

Perché '} else {header ('location: /404.html'); } '? Non dovrebbe essere lasciato solo senza reindirizzamento se '$ aurl == $ lurl'? – tnschmidt

2

Prima installazione speling_module. Quindi includere LoadModule speling_module modules/mod_speling.so in httpd.conf e quindi includere

<IfModule mod_speling.c> CheckSpelling On CheckCaseOnly On </IfModule>
in httpd.conf, quindi riavviare il servizio httpd utilizzando comando service httpd restart.

Problemi correlati