правило mod_rewrite для якорей

#mod-rewrite #anchor

#переписать мод #привязка

Вопрос:

Я хочу переписать URL на URL с якорями

 from "topic/14/599" to "topic.php?id=14#599"
  

это мой текущий rewriterule:

 RewriteRule ^topic/([0-9] )/([0-9] )$ /topic.php?id=$1#$2 [NE,L,R]
  

это работает нормально, но переписанное правило находится в адресной строке!
таким образом, адресная строка браузера меняется с «topic / 14 / 599» на «topic.php?id=14#599»

Я бы предпочел сохранить «упрощенную» версию в адресной строке, однако rewriterule не работает без L, R-флагов, я просто не могу заставить его работать. (если я просто перепишу topic / 14 в topic.php?id=14 без каких-либо флагов, это работает просто отлично)

Обновить:

 RewriteRule ^topic/([0-9] )/([0-9] )$ topic.php?id=$1amp;a=$2 [NE]
  

теперь работает! адресная строка выглядит для пользователя следующим образом: mydomain.com/topic/14/599
и внутренне оно перенаправляется на topic.php?id=14amp;a = 599, и как только страница загружена, javascript переходит к элементу с id = 599!

Ответ №1:

Поскольку якоря обрабатываются на стороне клиента, нет способа перезаписать якорь «молча», как вы пытаетесь сделать — якорь должен быть в видимом пользователем URL в какой-то момент. Вы могли бы переписать topic/14/244 на topic/14#244 в качестве перенаправления и topic/14 внутренне переписать на topic.php?id=14 , но вы не можете сделать и то, и другое за один шаг.

Комментарии:

1. Спасибо! Я думал, что смогу сделать все с помощью mod_rewrite 😉 Теперь я перенаправлю на topic.php?id =1 amp; a = 32, а затем использую javascript, чтобы установить фокус на якорь! (и адресная строка выглядит так, как я хотел: topic/1/32)