2013-12-19 5 views
0

У меня есть веб-страницу, установить там, где пользователь может перемещаться к определенному элементу на странице, как так:позволяют слэш в URL-адрес .htaccess

www.example.com/models.php#DDD-34 

На данный момент он использует # символ для обозначения кода элемент, к которому я хочу привязать. Можно ли с помощью .htaccess, чтобы позволить / символ вместо #

Таким образом, вместо выше, чтобы связать элементы его

www.example.com/models.php/DDD-34 

это было бы возможно в любом случае? Потому что / означает путь, который он приносит с ошибкой 404. какой код .htaccess позволит это?

+0

Почему в мире вы бы использовали якорь вместо параметра get? Почему вы держите «models.php» как часть перезаписываемого URL-адреса? –

ответ

0

Есть что-то, что вам нужно учитывать при составлении такого решения. # является элементом клиентской стороны, он никогда не отправляется на сервер как часть запроса. Это означает, что даже если вы хотите иметь возможность перейти на www.example.com/models.php/DDD-34, единственное, что может сделать htaccess для вас, это внешне перенаправить браузер назад www.example.com/models.php#DDD-34. Вот и все. Сервер не знает, что делать с частью #DDD-34, поскольку это то, что понимает javascript, работающий в вашем браузере.

Если вы хорошо с адресной строки браузера меняется обратно www.example.com/models.php#DDD-34 то это то, что вам нужно:

RewriteEngine On 
RewriteRule ^models\.php/(.*)$ /models.php#$1 [L,R,NE] 
+0

Если он возьмет его дальше и использует javascript для захвата хэша в сочетании с pushstate HTML5 для обновления адресной строки браузера, то он мог бы сделать именно то, что он хочет, с вашим решением .htaccess. Я обновил свой ответ, чтобы подчеркнуть это. :-) – prograhammer

0

Вы можете добавить что-то вроде этого в файле .htaccess:

RewriteEngine On 
RewriteRule ^models.php/(.*)$ /models.php?item=$1 [L,NC,QSA] 

Тогда есть на стороне сервера скрипт (скажем, PHP) заполнить JavaScript, необходимые для перехода на этот якорь:

<script> location.hash = "#" + <?=$_GET['item'];?>; </script> 

Где <?=$_GET['item'];?> добавит этот элемент, используя PHP. (Примечание: при использовании PHP, вы хотите, чтобы дополнительно защитить этот кусок кода с чем-то вроде этого: <?=addslashes($_GET['item']);?>

Альтернативно, вы можете использовать ответ Джон Лин в сочетании с использованием javascript to grab the hash item и HTML5's pushstate добиться того, что вы хотите без использования сценария на стороне сервера.

Смежные вопросы