Question

It's been a while since I've messed with .htaccess and I can't seem to get this quite right. I have a site, say example.com, where I want example.com/* to redirect to example.com/collector.html except for URLs under the subdirectory example.com/special, which I want to continue working.

For example:

  • example.com/page.html should redirect to example.com/collector.html
  • example.com/foo/bar should redirect to example.com/collector.html
  • example.com/special/page.html should not redirect

I would have thought that something like

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

would do the trick, but it doesn't seem to work the way I want it to.

Was it helpful?

Solution

Maybe this? (needs mod_rewrite)

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

OTHER TIPS

This works fine for me on Apache 2.2.13 where I recreated the directory structure you described.

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

The pattern in the brackets is saying do NOT match if the URI contains the string 'special'.

Also mod rewrite is not always available and in this case is not needed.

Try this:

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

Maybe...?

RewriteEngine on
RewriteRule ^(?!special) collector.html [R,NC]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top