Правильное формирование 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.

Матас Вайткявичюс
источник