Come utilizzare .htaccess per reindirizzare tutti, ma una sottodirectory
Domanda
E 'stato un po' da quando ho pasticciato con .htaccess e io non riesco a ottenere questo giusto. Ho un sito, ad esempio example.com, dove voglio example.com/* per reindirizzare example.com/collector.html tranne per gli URL sotto l'example.com/special sottodirectory, che voglio di continuare a lavorare.
Ad esempio:
- example.com/page.html dovrebbe reindirizzare example.com/collector.html
- example.com/foo/bar dovrebbe reindirizzare example.com/collector.html
- example.com/special/page.html non dovrebbe reindirizzare
avrei pensato che qualcosa di simile
RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html
farebbe il trucco, ma non sembra funzionare il modo in cui voglio che.
Soluzione
Forse questo? (Necessita mod_rewrite)
RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]
Altri suggerimenti
Questo funziona bene per me su Apache 2.2.13, dove ho ricreato la struttura di directory che hai descritto.
RedirectMatch 302 /(?!special) http://www.example.com/collector.html
Il modello tra parentesi sta dicendo non corrispondono se l'URI contiene la stringa 'speciale'.
Anche mod rewrite non è sempre disponibile e in questo caso non è necessario.
Prova questo:
RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html
Forse ...?
RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]