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

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

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

Возможно ли это сделать? Правильно ли я понимаю, что, поскольку к серверу идет запрос только /zakaz/, а #form обрабатывается уже на клиенте, ни php, ни mod_rewrite через .htaccess не помогут, т.е. только средствами javascript?
  • Вопрос задан
  • 35070 просмотров
Пригласить эксперта
Ответы на вопрос 6
TroL929
@TroL929
веб-программист
Вопрос конечно устаревший, ну пока ответ под рукой отвечу. Может кому пригодится.
history.pushState('', document.title, window.location.pathname);
Ответ написан
Комментировать
window.location.href.split('#')[0]
как-то так, но лучше добавить / в action формы
Ответ написан
@Sims
Как уже было упомянуто, хеш можно убрать при момощи javascript, изменив свойство window.location.hash. Сервер не сможет убрать хеш, поскольку он не включается браузером в параметры запроса и, соответственно, не отправляется на сервер (в целом, единственный способ прислать хеш серверу — вручную добавить его через javascript в качестве одного из параметров перед отправкой запроса). Более того, даже если сервер будет знать, что в запросе присутствует хеш, в общем случае он все равно не сможет убрать хеш из параметра запроса (через redirect response), поскольку согласно спецификации w3c браузер обязан автоматически добавлять хеш (fragment identifier) к строке запроса после обработки редиректа (http://www.w3.org/TR/cuap#uri).
Ответ написан
Комментировать
Almazka987
@Almazka987
веб-программист
jquery код - настройка перехода по якорю, чтобы решетка не отображалась в адресной строке после перехода:
$('a[href*=#]').bind("click", function(e){
      var anchor = $(this);
      $('html, body').stop().animate({
         scrollTop: $(anchor.attr('href')).offset().top-100
      }, 1000);
      e.preventDefault();
   });
Ответ написан
Прочитал несколько раз но так и не понял…
У вас не отправляется форма если зайти по адресу domainname.ru/zakaz/#form?
И при это она же оправляется по domainname.ru/zakaz/?
Ответ написан
deilux
@deilux
Вообще, за якорь в адресе отвечает свойство window.location.hash. Нужно просто его очистить
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы