Pergunta

Tem sido um tempo desde que eu mexeu com .htaccess e eu não consigo obter esta muito bem. Eu tenho um site, dizer example.com, onde eu quero example.com/* para redirecionar para example.com/collector.html , exceto para URLs sob o subdiretório example.com/special, o que eu quero para continuar a trabalhar.

Por exemplo:

  • example.com/page.html deve redirecionar para example.com/collector.html
  • example.com/foo/bar deve redirecionar para example.com/collector.html
  • example.com/special/page.html não deve redirecionamento

Eu teria pensado que algo como

RedirectMatch 302 ^/[^(special)]/.* /collector.html
RedirectMatch 302 ^/[^(collector.html)/]* /collector.html

faria o truque, mas não parecem funcionar da maneira que eu quero.

Foi útil?

Solução

Talvez isso? (Necessidades mod_rewrite)

RewriteEngine On
RewriteRule !^(special(/.*)?|collector\.html)$ collector.html [R,L]

Outras dicas

Esta multa funciona para mim no Apache 2.2.13 onde eu recriou a estrutura de diretórios que você descreveu.

RedirectMatch 302 /(?!special)  http://www.example.com/collector.html

O padrão entre parênteses está dizendo não correspondem se o URI contém a string 'especial'.

Além disso mod reescrever nem sempre está disponível e, neste caso, não é necessário.

Tente isto:

RedirectMatch 302 /\/[^(special)]\/.+/ /collector.html 
RedirectMatch 302 /\/[^(collector\.html)]/ /collector.html

Talvez ...?

RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top