2010-05-27 16 views
10

Ich möchte URLs wie server.com/foo, um Groß-und Kleinschreibung zu beachten. tatsächlich Aber server.com/foo wird server.com/somedir/foo mod_rewrite'dKonvertieren in Kleinbuchstaben in einer Mod_rewrite-Regel

(Angenommen, dass alle Dateien in „somedir“ sind Kleinschreibung.)

Die Frage ist also, wie man erreichen eine mod_rewrite wie folgt aus:

RewriteRule ^([^/]+)/?$ somedir/convert_to_lowercase($1) 

PS: Hier ist ein handliches mod_rewrite Spickzettel - http://dreev.es/modrewrite - obwohl es diese besondere Frage zu beantworten, schlägt fehl.

PPS: Dank Bee und Ignacio für alle Hilfe mit diesem. Auch hier ist eine weitere Frage: RewriteMap activation

Antwort

14

Zuerst legen Sie die folgende Zeile in dem <VirtualHost> Abschnitt Ihrer Conf-Datei. (Für mich lebt in /etc/httpd/vhosts.d/00foo.conf.)

RewriteMap lc int:tolower 

Sie lc mit einem beliebigen Namen ersetzen können Sie wollen. Starten Sie dann Apache neu, was Sie mit sudo service httpd restart tun können.

Schließlich fügen Sie diese in Ihrer .htaccess-Datei:

RewriteRule ^/(.*)$ /${lc:$1} 
+0

Funktioniert hier. Hast du httpd geprellt? –

+0

Wahrscheinlich nicht. Was bedeutet das? – dreeves

+0

Neustart. Das Senden eines SIGHUP funktioniert unter POSIX. –

10
RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} 
+1

Ah, danke, es jetzt passt zu dem, was ich in der Zwischenzeit irgendwo im Internet gefunden habe, aber es funktioniert immer noch nicht für mich. Ich habe deinen anderen Kommentar zum Prellen von httpd nicht verstanden. – dreeves

+0

Ich habe versucht, das oben genannte zu meinem .htaccess hinzuzufügen und httpd neu zu starten, und es bringt die ganze Domäne herunter. Das Fehlerprotokoll sagt: "Rewritemap ist hier nicht erlaubt". Wo soll ich die Rewritemap-Anweisung konkret hinstellen? Die Dokumentation, die ich finde, zeigt sie als zwei aufeinanderfolgende Zeilen, wie oben. (Ich habe es gerade in .htaccess direkt über der spezifischen RewriteRule eingefügt). – Bee

+1

@Bee: Die Dokumentation sagt "Server-Konfiguration, virtueller Host", was bedeutet, direkt im Haupt-Konfigurations-Stream oder innerhalb einer '' Direktive. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap –

2

Ich würde es eine 301-Weiterleitung machen, nicht eine URL Rewrite, für Zwecke SEO:

RewriteMap tolower int:tolower 
RewriteRule ^([^/]+)/?$ somedir/${tolower:$1} [R=301,L] 
+3

Ein 301 ohne Cache-Expiry-Header ist sehr schlecht, weil es im Browser * für immer * zwischengespeichert wird. Sie werden mit seinen Effekten seit Jahren leben. Ändern Sie "R = 301, L" zu "R = 301, L, E = limitcache: 1" und fügen Sie eine Anweisung "Header set cache-control" mit dem maximalen Alter = 3600 "env = limitcache" hinzu. Dadurch wird die Caching-Zeit auf 1h begrenzt und Sie erhalten gleichzeitig die SEO-Vorteile einer 301-Weiterleitung. –

Verwandte Themen