htaccess modrewrite problem with rewriting url with- dashes solution
I was getting frustrated with trying to write a simple URL like this:
/example-withdash
I used the htaccess code like this:
Rewriterule ^example-withdash$ / [R=301]
I also tried escaping the dash which I thought should have treated it as a literal but that didn't work either:
Rewriterule ^example\-withdash$ / [R=301]
But it wouldn't work, apparently the "-" dash means don't substitute, so this means in plain Engilsh that my rule is not treated as intended or expected.
- (dash)A dash indicates that no substitution should be performed (the existing path is passed through untouched). This is used when a flag (see below) needs to be applied without changing the path.
The Solution:
Put brackets around the rewrite rule ()
Rewriterule ^(example-withdash)$ / [R=301]
Now it works, it's very simple but quite frustrating when you don't know this. I actually think Apache should have a debug mode or some switch to run an .htaccess file and verbosely output the interpretation of each rule.