Ситуация следующая:
есть сайт на некой CMS, на нем страница формы заказа по адресу /zakaz/, после нажатия на кнопку «Отправить» юзер средствами CMS перенаправляется на страницу /zakaz/ok/. Когда-то на непосредственно форму стоял html-якорь #form (чтобы страница по адресу /zakaz/#form отображалась начиная с первой строки формы). Позже стало понятно, что если юзер заполняет форму с урл в браузере /zakaz/#form — форма отрабатывает некорректно (нет перенаправления).
Задача — при заходе юзера по адресу /zakaz/#form менять урл в его браузере на /zakaz/
Возможно ли это сделать? Правильно ли я понимаю, что, поскольку к серверу идет запрос только /zakaz/, а #form обрабатывается уже на клиенте, ни php, ни mod_rewrite через .htaccess не помогут, т.е. только средствами javascript?
Как уже было упомянуто, хеш можно убрать при момощи javascript, изменив свойство window.location.hash. Сервер не сможет убрать хеш, поскольку он не включается браузером в параметры запроса и, соответственно, не отправляется на сервер (в целом, единственный способ прислать хеш серверу — вручную добавить его через javascript в качестве одного из параметров перед отправкой запроса). Более того, даже если сервер будет знать, что в запросе присутствует хеш, в общем случае он все равно не сможет убрать хеш из параметра запроса (через redirect response), поскольку согласно спецификации w3c браузер обязан автоматически добавлять хеш (fragment identifier) к строке запроса после обработки редиректа (http://www.w3.org/TR/cuap#uri).
Насколько я понял, если зайти по адресу domainname.ru/zakaz/#form, то пользователь при нажатии «Отправить» не перенаправляет на страницу domainname.ru/zakaz/ok. Видимо в форме прописано action=«ok/», вместо "/zakaz/ok/". Если моя догадка верна, то достаточно поправить форму.
>> можно решить средствами javascript,
Не подскажете, как именно? В каком направлении смотреть?
>>причина неработоспособности скорее всего не в этом
Причина именно в этом. Перенаправление в CMS реализовано добавлением подстроки ok/ к урлу, а значит если мы заполняем форму по адресу /zakaz/ — перенаправляемся на /zakaz/ok/, если по адресу /zakaz/#form — на /zakaz/#formok/, т.е. в никуда (остаемся на той же странице, если быть точным). Но проблемы CMS — не тема вопроса, тема вопроса — как принудительно отредактировать урл на стороне клиента.