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

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

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

Возможно ли это сделать? Правильно ли я понимаю, что, поскольку к серверу идет запрос только /zakaz/, а #form обрабатывается уже на клиенте, ни php, ни mod_rewrite через .htaccess не помогут, т.е. только средствами javascript?
  • Вопрос задан
  • 27589 просмотров
Пригласить эксперта
Ответы на вопрос 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. Нужно просто его очистить
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Cloud4Y Ярославль
от 65 000 до 130 000 ₽
Farpost Владивосток
от 100 000 до 160 000 ₽
Сын маминой подруги Нижний Новгород
от 65 000 ₽
26 февр. 2020, в 13:30
10000 руб./за проект
26 февр. 2020, в 13:23
20000 руб./за проект
26 февр. 2020, в 13:20
1000 руб./за проект