2010-01-04 10 views
16

Ich möchte für jede URL, die keine vorhandene Datei trifft, eine Suche nach den anderen möglichen Fällen durchführen und prüfen, ob diese Dateien vorhanden sind, und wenn ja, 302.URLs in Groß- und Kleinschreibung mit mod_rewrite

Wenn das nicht möglich ist, dann bin ich mit diesen Kompromissen ok:

  • Nur die Kleine Version check check
  • nur den ersten Wegabschnitt

Zum Beispiel http://example.com/CoOl/PaTH/CaMELcaSE sollte umleiten http://example.com/cool/path/camelCase (unter der Annahme, dass letzteres existiert).

aber natürlich eine vollständige Lösung ist viel nützlicher für mich und andere

+1

Ich würde lieber eine 301 als eine 302 verwenden. – Gumbo

Antwort

20
CheckSpelling on 

Entspricht Dateien und Verzeichnissen. Details finden Sie unter documentation.

+0

Gibt es ein Äquivalent für die neueren Versionen? – icedwater

+0

@icedwater Es funktioniert noch. – fuxia

+0

Sah nicht so aus; Ich habe Ubuntu 12.04 LTS, Apache 2.2.22 und erstellen symbolische Links zu speling.load und speling.conf in '$ APACHE/mods-enabled /' scheint nicht Ordnernamen mit der falschen Groß-/Kleinschreibung zu erlauben. (natürlich, speling.load und speling.conf sind eingerichtet ... vielleicht sollte ich eine andere Frage stellen.) – icedwater

0

die Apache-Modul mod_negotiation nachschlagen. Es macht genau das, was Sie wollen:

Sie können auch alle Anfragen zu einer einzigen PHP-Datei leiten und lassen Sie die PHP-Datei für Sie überprüfen.

+0

Das ist in der Nähe, aber scheint vor allem für das Hinzufügen von Erweiterungen. Wie eine Anfrage für 'foo' wird' foo.xml' oder 'foo.html'. Ich versuche, Tippfehler zu beheben. –

4

Ich habe Apache nicht praktisch, zu testen, aber eine Kombination dieser Regeln sollte das tun, was Sie wollen:

 
RewriteEngine on 
RewriteMap lower int:tolower 
RewriteCond ${lower:%{REQUEST_URI}} -U 
RewriteRule [A-Z] ${lower:%{REQUEST_URI}} [R=302,L] 
  • Ein Kleinen Karte/etwas konvertieren/etwas
  • eine Bedingung zu sehen, ob der Klein der REQUEST_URI existiert (-U ist interne apache-Abfrage)
  • die Regel tatsächlich tut dem Umschreiben

Ich weiß nicht, ob die RewriteMap in einer Bedingung angewendet werden kann oder ob sie nur für eine Regel gilt. Diese basieren auf experts exchange accepted answer und a small orange forum discussion.

Ihre "ideale" Lösung ist wahrscheinlich nicht möglich, es sei denn, Sie können jede gültige Seite auf Ihrer Site aufzählen. Wenn Sie nur ein paar gültige Seiten haben, wird eine Kombination aus RewriteMap und einer Textkarte genau das tun, was Sie brauchen. Wenn Hunderte/Tausende von Seiten vorhanden sind, müssen Sie möglicherweise ein Skript schreiben und die Anweisung prg verwenden.

Wenn Sie nicht jede gültige Seite identifizieren können, müssen Sie jede Variante für den Fall testen. Betrachten Sie Ihre URL als binäre Zeichenfolge, wobei 0 für Kleinbuchstaben und 1 für Großbuchstaben steht. Nur von Ihrem einfachen Beispiel müssten Sie 2^17 Variationen, 128k Seiten testen.

Verwandte Themen