Правильное формирование URL-адреса с помощью строки запроса и хештега привязки


114

Когда в URL-адресе видны и строка запроса, и тег привязки (хэш-тег), в каком порядке они должны отображаться?

http://www.whatever.com?var=val#anchor

или

http://www.whatever.com#anchor?var=val

Есть ли по этому поводу документация?

обновление: URL-адреса обрабатываются Wordpress / PHP

Ответы:


149
?var=var#hash

все после #- это клиентская сторона.

Кроме того, изучите возможность перезаписи URL, чтобы избавиться от некрасивых ?var=var


26
строка запроса уродлива, но имеет свое назначение и более гибкая
Морио

7
Что плохого в использовании строк запроса? они являются частью стандарта HTTP по какой-то причине
Хулио Бастида

Да, но какие параметры для межстраничных параметров на стороне клиента для SPA (одностраничных приложений)?
Пит Элвин,

64

? должен стоять перед #, как указано в RFC 3986 :

relative-ref = relative-part [ "?" query ] [ "#" fragment ]

Взято из ответа суперпользователя ( /superuser/498617/does-an-anchor-tag-come-before-the-query-string-or-after ):


2
Это должен быть принятый ответ. В нем четко указана документация и не учитывается личное мнение комментатора.
Амир Кейби

3

Обратите внимание, что если URL-адрес содержит как теги привязки (#), так и строки запроса (?), Браузер может игнорировать строку запроса и перейти к тегу привязки без перезагрузки страницы.

Может потребоваться отправить страницу, используя

    <form action='webpage.php?q=string#tag' method='GET or POST'>
    <input type='text' id='q' name='q' value='string'>
    <input type='submit' value='submit'>
    </form> 

а не просто URL-ссылка

    <a href='webpage.php?q=string#tag'>.

1

Если целью использования #является обозначение страницы, fragmentтогда - ?тогда да #.

Если #появляется раньше ?и не для обозначения страницы fragment(это может произойти, если #это часть полномочий (имя пользователя и пароль)), ее необходимо закодировать, иначе у вас проблемы. То же самое относится и к любым другим специальным символам ( :, @, ...) , которые могли бы дать другое значение URL.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.