The question is fairly simple but I was not able to find an answer for hours now.
What I need to do is:
RewriteRule ([^#])#(.*) $1\%23$2
Which basically means I want to url escape the freaking hash sign which comes to me from an external codepiece.
backslash (\
) does not work to escape this sign... and please don't suggest using %23
instead #
because it does not work as well.
(%2
3 does not match a #
because it simply is not == %23
)
The hash part of a URL is not available for rewriting. When a web browser sends a URL request to a web server it sends everything up to the hash sign. The hash is only available on the client (e.g. JavaScript code can see it).
Search Extended Redirection in http://httpd.apache.org/docs/2.0/misc/rewriteguide.html . There is a nice solution for your question.
.htaccess
redirect.php
I just got this working for a site following a couple of posts on this forum, I'm using a rewrite rule with NE not escape and R=301 redirect options:
This redirects all galleries/variable to /gallery.html#/variable
Edit: The important part of the rule is NE which instructs the server to parse output without escaping characters. Without this, it will try and escape the # in the rewrite rule which is what the OP is asking about.