views:

259

answers:

2

Hi -

I have a situation where I want to take the following URL:

/1/john

and have it redirect using Apache's htaccess file to go to

/page.php?id=1&name=john#john

so that it goes to an html anchor with the name of john.

I've found a lot of reference to escaping special characters, and to adding the [NE] flag so that the redirect ignores the # sign, but these don't work. For example, adding [NE,R] means that the URL just appears in the browser address as the original: http://mysite.com/page.php?id=1&name=john#john.

Any help would be appreciated.

A: 

You cannot do an internal redirect to an anchor. (Just think about it: how would Apache scroll down to the anchor?) Your link should pointo to /1/john#john. Anchors aren't part of the request uri.

nikc
I'm verifying this in practice and believe you're correct. The browser interprets anchors and scrolls down to the correct point in the page; an Apache redirect is not able to do this because the redirected-to URI isn't passed to the browser.
Lee L
A: 

What you want to do, can be accomplished with URL rewriting, or, more specifically, URL beautification.

I just quickly found this well explained blog post for you, I hope it can help you out with the learning to rewrite URLs-part.

As for the #-thing (expecting that you now know what I'm talking about), I don't see a problem in passing the same variable to the rewritten URL twice. Like: (notice the last part of the first line)

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$  /$1/$2/#$2 [R]
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&subpage=$2

Though, you'll have to escape the #-part, and it seems that it can be done this way:

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$  /$1/$2/\%23$2 [R,NE]

BTW, URL rewriting is not that hard (but can become complicated, and I'm not an expert), but Google can help a lot along the way.

Sune Rasmussen
Hi Sune, thanks for the response. I don't think what I'm trying to do is possible, however. See response on this page from nikc.
Lee L