Задать вопрос

Как убрать якорь (#, hash, хэш, решетку) в URL?

Ситуация следующая:
есть сайт на некой CMS, на нем страница формы заказа по адресу /zakaz/, после нажатия на кнопку «Отправить» юзер средствами CMS перенаправляется на страницу /zakaz/ok/. Когда-то на непосредственно форму стоял html-якорь #form (чтобы страница по адресу /zakaz/#form отображалась начиная с первой строки формы). Позже стало понятно, что если юзер заполняет форму с урл в браузере /zakaz/#form — форма отрабатывает некорректно (нет перенаправления).

Задача — при заходе юзера по адресу /zakaz/#form менять урл в его браузере на /zakaz/

Возможно ли это сделать? Правильно ли я понимаю, что, поскольку к серверу идет запрос только /zakaz/, а #form обрабатывается уже на клиенте, ни php, ни mod_rewrite через .htaccess не помогут, т.е. только средствами javascript?
  • Вопрос задан
  • 35303 просмотра
Подписаться 9 Оценить Комментировать
Ответ пользователя Sims К ответам на вопрос (6)
@Sims
Как уже было упомянуто, хеш можно убрать при момощи javascript, изменив свойство window.location.hash. Сервер не сможет убрать хеш, поскольку он не включается браузером в параметры запроса и, соответственно, не отправляется на сервер (в целом, единственный способ прислать хеш серверу — вручную добавить его через javascript в качестве одного из параметров перед отправкой запроса). Более того, даже если сервер будет знать, что в запросе присутствует хеш, в общем случае он все равно не сможет убрать хеш из параметра запроса (через redirect response), поскольку согласно спецификации w3c браузер обязан автоматически добавлять хеш (fragment identifier) к строке запроса после обработки редиректа (http://www.w3.org/TR/cuap#uri).
Ответ написан
Комментировать