Как использовать htaccess, чтобы переписать URL в HTML-тег привязки (#)

У меня есть ситуация, когда я хочу взять следующий URL:

/ 1 / John

и перенаправить его, используя Apache htaccess файл, чтобы перейти к

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

так что это идет на якорь HTML с именем Джона.

Я нашел много ссылок на экранирование специальных символов и добавление флага [NE], чтобы перенаправление игнорировало знак #, но они не работают. Например, добавление [NE,R] означает, что URL-адрес просто отображается в адресе браузера как оригинал: http://example.com/page.php?id=1&name=john.

4 ответа

Это возможно при использовании флага [NE] (noescape).

По умолчанию специальные символы, такие как & и?, Например, будут преобразованы в эквивалент в шестнадцатеричном формате. Использование флага [NE] предотвращает это.

Дополнительная информация http://httpd.apache.org/docs/2.2/rewrite/flags.html

На самом деле вы можете сделать одну из этих вещей, но не обе.

Вы можете использовать флаг [NE], чтобы указать Apache не экранировать символ "#", но чтобы перенаправление работало, вы должны указать абсолютный URL для перенаправления, а не просто относительную страницу. Apache не может выполнить прокрутку окна до якоря за вас. Но браузер будет, если вы перенаправите на абсолютный URL.

То, что вы хотите сделать, может быть выполнено с помощью переписывания URL-адреса или, более конкретно, улучшения URL-адреса.

Я быстро нашел для вас этот хорошо объясненный пост в блоге, надеюсь, он поможет вам научиться переписывать URL-части.

Для # Что-то (ожидая, что вы теперь знаете, о чем я говорю), я не вижу проблемы в передаче одной и той же переменной в переписанный URL дважды. Нравится: (обратите внимание на последнюю часть первой строки)

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

Тем не менее, вам придется избежать # и, похоже, это можно сделать так:

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

Кстати, переписывание URL не так сложно (но может стать сложным, и я не эксперт), но Google может помочь на этом пути.

Вы не можете выполнить внутреннее перенаправление на якорь. (Только подумайте: как Apache прокрутил бы вниз до якоря?) Ваша ссылка должна указывать на /1/john#john, Якоря не являются частью запроса URI.

Другие вопросы по тегам