Подтвердить что ты не робот

Как использовать htaccess для перезаписи url в html anchor tag (#)

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

/1/John

и перенаправить его с помощью файла htaccess Apache, чтобы перейти на

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

чтобы он перешел к якорю html с именем john.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Что касается # -thing (ожидая, что теперь вы знаете, о чем я говорю), я не вижу проблемы с передачей одной и той же переменной дважды переписанному 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

Однако вам придется скрывать # -part, а кажется, что это можно сделать следующим образом:

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

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

Ответ 4

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