Как перенаправить на URL-адрес, содержащий якорь (#)?

Мне нужно взять стандартные входящие URL-адреса и переписать перенаправить их на определенные якоря на одной странице (имя входящей html-страницы становится именем якоря). Например, правило будет таким:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [R]

Итак, этот URL:

http://foo.com/files/bar.html

...станет:

http://foo.com/test.html#bar

Само правило работает нормально, но символ # кодируется в адресной строке браузера так:

http://foo.com/test.html%23bar

который, конечно, не работает корректно в качестве якоря. Есть ли способ в .htaccess заставить его не кодировать хэш? Я также пытался экранировать его, как \#, но это не имеет значения.


person Brian Moeskau    schedule 18.08.2009    source источник


Ответы (2)


Попробуйте флаг noescape (NE) в своем правиле:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE, R]
person Pat    schedule 18.08.2009
comment
Потрясающе, спасибо. Я подумал, что это должно быть что-то простое, но Google не указал мне путь;) - person Brian Moeskau; 18.08.2009

Используйте флаг NE или No Escape:

RewriteRule ^files/([a-zA-Z0-9\-_]+)\.html$ /test.html#$1 [NE,R]

person inerte    schedule 18.08.2009
comment
Пэт опередил меня на 57 секунд ;) Пусть мир узнает, что предупреждение о новых ответах SO занимает больше времени! - person inerte; 18.08.2009