Ответы:
?var=var#hash
все после #
- это клиентская сторона.
Кроме того, изучите возможность перезаписи URL, чтобы избавиться от некрасивых ?var=var
? должен стоять перед #, как указано в RFC 3986 :
relative-ref = relative-part [ "?" query ] [ "#" fragment ]
Взято из ответа суперпользователя ( /superuser/498617/does-an-anchor-tag-come-before-the-query-string-or-after ):
Обратите внимание, что если 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'>.
Если целью использования #
является обозначение страницы, fragment
тогда - ?
тогда да #
.
Если #
появляется раньше ?
и не для обозначения страницы fragment
(это может произойти, если #
это часть полномочий (имя пользователя и пароль)), ее необходимо закодировать, иначе у вас проблемы. То же самое относится и к любым другим специальным символам ( :
, @
, ...) , которые могли бы дать другое значение URL.