Wie .htaccess verwenden alle bis auf ein Unterverzeichnis zu umleiten
Frage
Es ist schon eine Weile her, seit ich mit .htaccess versaut habe und ich kann das nicht ganz richtig zu machen scheinen. Ich habe eine Seite, sagen example.com, wo ich example.com/* wollen umleiten example.com/collector.html außer für URLs unter dem Unterverzeichnis example.com/special, die ich will weiter zu arbeiten.
Zum Beispiel:
- example.com/page.html sollte umleiten example.com/collector.html
- example.com/foo/bar sollte umleiten example.com/collector.html
- example.com/special/page.html sollte nicht umleiten
Ich hätte gedacht, dass so etwas wie
RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html
würde den Trick tun, aber es scheint nicht die Art und Weise arbeiten ich es will.
Lösung
Vielleicht? (Muss mod_rewrite)
RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]
Andere Tipps
Dies funktioniert gut für mich auf Apache 2.2.13, wo ich die Verzeichnisstruktur neu erstellt Sie beschrieben.
RedirectMatch 302 /(?!special) http://www.example.com/collector.html
Das Muster in den Klammern sagt nicht übereinstimmen, wenn die URI die Zeichenfolge ‚besondere‘ enthalten.
Auch mod Rewrite ist nicht immer verfügbar und in diesem Fall ist nicht erforderlich.
Versuchen Sie folgendes:
RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html
Vielleicht ...?
RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]