2013-02-11 17 views
15

Ich arbeite eine Website, die auf einem Linux-Server bereitgestellt wird. Ich habe kleine Änderungen daran zu tun. Ich habe Ordner read. Die Voraussetzung ist, dass, wenn ich die URL localhost:80/tom/Read oder ../READ oder /read eingeben muss es zu read.php innerhalb eines Ordners read navigieren muss.Wie mache ich URLs Groß-und Kleinschreibung in Linux-Server

Ich erstellte eine Datei .htaccess unter einem Stammverzeichnis. Platziert folgenden Code Erwähnung unten in der Datei um die Seite zu sehen 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] 

Aber es funktioniert nicht.

Ich bin neu in Linux-Umgebung. Ich weiß nichts über mod_speling. Ist das eine Datei? Wo wird es in Linux-Server gefunden werden?

+1

Ich würde die Spezifikation hier in Frage stellen. Dies würde zu mehr Problemen führen, zum Beispiel bei der Bot-Indexierung. –

+0

mögliches Duplikat von [Groß- und Kleinschreibung in URLs mit mod \ _rewrite] (http://stackoverflow.com/questions/1998156/case-insensitive-urls-with-mod-rewrite) –

+0

Ja, die Anforderung wird wahrscheinlich ein Problem sein selbst. Das heißt, es gibt ein Apache-Modul, das helfen kann (es ist derjenige, der mit Anfragen umgehen kann, die ein bisschen aus sind, und eine Alternative bieten ... Ich vergesse den Namen) Edit: es ist 'MultiViews' –

Antwort

25

können Sie bequem die Apache-Webserver machen den Fall ignorieren, indem die mod_speling-Modul, das Teil der Standard-Apache-Distribution ist:

CheckSpelling On 
CheckCaseOnly On 

Nach httpd Neustart Sie read als Read oder READ oder read zugreifen können.

+0

Hi Hoeni .. Ich habe den obigen 2 Zeilencode in .htaccess mit bereits vorhandenem Code abgelegt. Dann neu gestartet. Es funktioniert nicht. Irgendein Vorschlag – sonorita

+0

Ich frage mich, ob es Leistungsüberlegungen bei der Verwendung gibt. Ich habe eine große Sencha-App, die dieses Problem hat. 390MB Dateien, die alle gemischt und unterschiedlich referenziert sind. –

+19

Bin ich der Einzige, der ironisch findet, dass das Modul zur Rechtschreibprüfung falsch geschrieben ist? – Dave

18

Hallo, ich habe endlich die Lösung. Platziert den folgenden Code in /etc/httpd/conf/httpd.conf.

LoadModule speling_module modules/mod_speling.so 

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

Dann starten httpd:

sudo service httpd restart 

Und schließlich verify es aktiviert ist:

sudo httpd -M | grep speling 

Das speling_module (shared)

Danke für die Hilfe für alle ergeben sollte ..

+0

Die IfModule-Richtlinie sollte überhaupt keinen Unterschied machen, da es nur zur Vermeidung von Fehlern ist, wenn Sie ** Laden Sie das Modul nicht **. (http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule). Wenn Sie Fehler ohne es haben, ist das mod_speling-Modul überhaupt nicht geladen. – hoeni

+2

Das 'speling'-Modul scheint auf Debian nicht standardmäßig aktiviert zu sein (wahrscheinlich auch Ubuntu). Um es zu aktivieren, verwenden Sie den Befehl 'sudo a2enmod speling '. – Dave

+0

Ich finde das Modul falsch geschrieben ist absolut fantastisch. – ScottMcGready

1

Hi ich bin mir nicht sicher, ob das hilft, aber das ist der einfache Workabout, den ich benutzt habe, er benutzt eine sehr einfache PHP-Seite, aber es funktioniert für die Seite, auf der ich es brauchte.

Platzieren Sie diesen Code in der .htaccess-Datei

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

Ich habe erstellt dann eine PHP-Datei wit die folgenden ..

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

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

Im Grunde ist es die aufgerufene URL wird -> Läden wie $ AURL

dann macht es Kleinbuchstaben -> speichert als $ lurl

wenn sie stimmen nicht überein, versucht dann, die Kleinbuchstabe-URL ($ lurl) anzuzeigen

Wenn das fehlschlägt, ist die Seite nicht vorhanden, die Referring-URL ist jetzt die gleiche ($ lurl == $ aurl) , so dass es dann zu a umleitet richtige 404 Seite oder kann einige zusätzliche Code anzeigen ..

+1

Warum die '} else {header ('location: /404.html'); } '? Sollte es nicht ohne Redirect allein gelassen werden, wenn '$ aurl == $ lurl'? – tnschmidt

2

Zuerst speling_module installieren. Fügen Sie dann LoadModule speling_module modules/mod_speling.so in httpd ein.Conf-Datei und dann

<IfModule mod_speling.c> CheckSpelling On CheckCaseOnly On </IfModule>
in httpd.conf, dann starten Sie httpd-Dienst mit Service httpd Neustart Befehl.

Verwandte Themen