Консультация № 171728
29.08.2009, 18:21
0.00 руб.
0 6 2
Всем привет!

Знаю, что немного не в php, но соответствующей темы не нашёл.

Мне нужно строку типа /kolobok/2/10 преобразовать на моём сайте в строку /?article=kolobok&chapter=2#v10

Здесь вызывает самый большой вопрос последнее число и его преобразование в ссылку на якорь.

Судя по всему это нужно делать в файле .htaccess, но в нём символ # - начало комментария, а в php этого уже не сделать.

Обсуждение

Неизвестный
29.08.2009, 19:36
общий
это ответ
Здравствуйте, Прим Палвер.
Попробуйте добавить в .htaccess следующие строки:


Приложение:
RewriteEngine On
RewriteRule ^([a-z_A-Z]*)/([0-9*])/([0-9*])$ index.php?article=$1&chapter=$2#v$3
5
Оно то конечно здорово, но, как я писал, # - начало комментариев в этом файле.<br>Как его скрыть, чтобы символ обозначал сам себя?<br>Или я что-то путаю?
Неизвестный
29.08.2009, 20:39
общий
Прим Палвер:
Здравствуйте, Прим Палвер!
Да вы правы я поспешил с ответом! якоря всё-таки зависят уже от браузера!
Так что правильно будет так:
RewriteEngine On
RewriteRule ^([a-z_A-Z]*)/([0-9*])/([0-9*])$ index.php?article=$1&chapter=$2&v=$3

А сам переход тогда следует реализовать на Java скриптах!!!
p.s. http://www.szenprogs.ru/blog/2009-03-03-30
Неизвестный
29.08.2009, 23:53
общий
а во вспомогательный файл нельзя вынести заменяемую строку и заменяющую?
или экранировать чем-то этот символ?
Не все ведь js включают.
Мне нужно именно такое преобразование, как в вопросе.
Неизвестный
30.08.2009, 09:01
общий
Прим Палвер:
Здравствуйте, Прим Палвер!

Цитата: 188347
Мне нужно именно такое преобразование, как в вопросе.


Можно это реализовать используя фреймы, тогда не будет видна строка перехода к якорю!!
Неизвестный
31.08.2009, 06:02
общий
это ответ
Здравствуйте, Прим Палвер.
http://httpd.apache.org/docs/trunk/configuring.html#syntax
Цитата: http://httpd.apache.org/docs/trunk/configuring.html#syntax
Lines that begin with the hash character "#" are considered comments, and are ignored. Comments may not be included on a line after a configuration directive.

т.о. комментариями считаются строки, начинающиеся с #, если же # стоит не вначале строки, то это не комментарий...
Код:

RewriteEngine On

RewriteRule (\w+)/(\d+)/(\d+)$ /?article=$1&chapter=$2#v$3

нормально работает. например если $_SERVER["REDIRECT_URL"] у меня "/a/10/20", то $_SERVER["REDIRECT_QUERY_STRING"] у меня "article=a&chapter=10#v20"

другой вопрос, для чего Вам это нужно... если в PHP скриптах у Вас как-то обрабатывается якорь из запроса, тогда все, если же нет, то учтите, что в браузер этот якорь( как и все, сделанное с помощью mod_rewrite ) не попадет... Если же, необходимо, чтобы ссылка менялась и в адресной строке браузера, можно использовать директиву RedirectMatch:
Код:

RedirectMatch (\w+)/(\d+)/(\d+)$ http://mysite.ru/index.php?article=$1\&chapter=$2#v$3

здесь замените mysite.ru на адрес Вашего сайта...
Успехов.
5
Спасибо!<br>Если использовать RewriteRule для переписывания якоря, то браузер перестанет "двигать" страницу?
Неизвестный
02.09.2009, 02:43
общий
Прим Палвер:
Если использовать RewriteRule для переписывания якоря, то браузер перестанет "двигать" страницу?
- что значит "двигать"?
Браузер может, если в запросе есть #, перейти на соответствующий якорь на странице-результате запроса... Если же в запросе нет #, как в "/kolobok/2/10", то и "двигать" он ничего не будет...

А о деятельности mod_rewrite, браузеру ничего неизвестно... в каком виде его запрос будет передан скрипту, в виде "/kolobok/2/10" или "/?article=kolobok&chapter=2#v10" - он не знает. Он знает только, что есть запрос "/kolobok/2/10" и есть ответ сервера. а # до него не доходит..

Другое дело Redirect... в этом случае ответом сервера на запрос "/kolobok/2/10" будет не содержимое страницы, а новый адрес этой страницы "/?article=kolobok&chapter=2#v10", и браузеру "приходится" делать второй запрос "/?article=kolobok&chapter=2#v10", в котором уже есть #, и теперь, получив страницу "/?article=kolobok&chapter=2#v10", браузер будет пытаться еще перейти на якорь v10....

Форма ответа