Comment utiliser htaccess pour rediriger tous sauf un sous-répertoire
Question
Il a été un moment que je l'ai foiré avec .htaccess et je ne peux pas sembler obtenir ce tout à fait raison. J'ai un site, par exemple example.com, où je veux example.com/* rediriger vers example.com/collector.html sauf pour les URL sous le sous-répertoire example.com/special, que je veux de continuer à travailler.
Par exemple:
- example.com/page.html devrait rediriger vers example.com/collector.html
- example.com/foo/bar devrait rediriger vers example.com/collector.html
- example.com/special/page.html ne doit pas rediriger
J'aurais pensé que quelque chose comme
RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html
ferait l'affaire, mais il ne semble pas fonctionner comme je veux.
La solution
Peut-être cela? (Besoins mod_rewrite)
RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]
Autres conseils
Cela fonctionne bien pour moi sur Apache 2.2.13 où je recréé la structure du répertoire que vous avez décrit.
RedirectMatch 302 /(?!special) http://www.example.com/collector.html
Le modèle dans les crochets dit ne correspondent pas si l'URI contient la chaîne « spéciale ».
Aussi mod rewrite est pas toujours disponible et dans ce cas n'est pas nécessaire.
Essayez ceci:
RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html
Peut-être ...?
RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]