Вопрос по ЧПУ (rewrite в .htaccess)

12
N
На сайте с 01.10.2011
Offline
19
1361

Коллеги, подскажите, почему может не работать строка:

RewriteRule ^apartment/build1 (index.php?q=apartment#build1) [NE,L]

При этом осуществляется перенаправление на site.ru/apartment, a #build1 игнорируется, хотя указан флаг NE.

В чём может быть проблема?

siv1987
На сайте с 02.04.2009
Offline
427
#1

Потому что в скобках, и область хеша это указатель внутри текущей страницы, нахрена он тут скриптам?

N
На сайте с 01.10.2011
Offline
19
#2

Без скобок происходит то же самое.

Возможно всё-таки #build1 интерпретируется как комментарий, т.к. начинается с #

Если так, то может кто-то знает, как можно выключить-включить комментарии в .htaccess?

и область хеша это указатель внутри текущей страницы, нахрена он тут скриптам?

Область хэша ведет на часть страницы, именно эта часть мне и нужна

---------- Добавлено 31.03.2014 в 13:30 ----------

Хотя вот такое правило работает ок, как комментарий ничего не интерпретируется.

RewriteRule ^apartment/build1 http://site.ru/index.php?q=apartment#build1 [NE,L]

Но при этом осуществляется уже редирект, т.е. адрес, который я вижу в браузере при наборе site.ru/apartment/bulid1 - это http://site.ru/index.php?q=apartment#build1. Как избежать переписи урла в браузере, но оставить правильное перенаправление для сервера?

siv1987
На сайте с 02.04.2009
Offline
427
#3
notoneofthe:
Область хэша ведет на часть страницы, именно эта часть мне и нужна

notoneofthe, либо вы нк понимаете что делаете, либо не правильно формулируете задачу. Якорь это указатель внутри страницы, а делайте вы реврайт серверу для которого нет такого понятия как якорь. Отсюда и вопрос нахрена реврайту якорь? Может вы с редиректом перепутали? Напишите как вы лучше задачу.

Как избежать переписи урла в браузере, но оставить правильное перенаправление для сервера?

Никак. Убрать нафиг оттуда якорь, сервер не обрабатывает якоря, а прокрутку к нужному месту сделать при помощью javascript.

rebenn
На сайте с 28.12.2007
Offline
78
#4

Прошу прощения у ТС, но дабы не создавать тему: Как в htaccess сделать редирект с http://site.ru/catalog/любой_номер?l=1

на http://site.ru/catalog/любой номер

N
На сайте с 01.10.2011
Offline
19
#5

Описываю задачу:

Мне нужно при задании адреса в браузере http://site.ru/apartment/build1 получить страницу http://site.ru/index.php?q=apartment#build1, при этом ссылка в браузере не должна переписаться.

Что для этого мне нужно сделать?

siv1987
На сайте с 02.04.2009
Offline
427
#6

notoneofthe, почитать предыдущий пост.

rebenn, добавить после RewriteEngine on

RewriteCond %{QUERY_STRING} =l=1

RewriteRule ^(catalog/\d+) /$1? [R=301,L]

N
На сайте с 01.10.2011
Offline
19
#7

Почему тогда нормально работает правило RewriteRule ^apartment/build1 http://site.ru/index.php?q=apartment#build1 [NE,L] ?

И в документации на http://httpd.apache.org/docs/current/rewrite/flags.html#flag_ne в разделе про флаг NE есть аналогичный пример:

RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]

The above example will redirect /anchor/xyz to /bigpage.html#xyz.
N
На сайте с 01.10.2011
Offline
19
#8

Она и работает, вопрос в том, почему не работает изначальная:

RewriteRule ^apartment/build1 index.php?q=apartment#build1 [NE,L]

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#9

ТС, Вам на китайском объяснить?

Хэш(#) использует клиент(браузер), для перехода к нужной части страницы.

Этот хэш браузер получает из адресной строки.

Вернемся к Вашему вопросу:

При УРЛе в браузере site.ru/apartment/build1 почему не работает хэш?!

Подпись))
siv1987
На сайте с 02.04.2009
Offline
427
#10
notoneofthe:
Почему тогда нормально работает правило RewriteRule

Потому что это редирект. Вы разницу редиректа от реврайта (внутренне конвертирование ссылок серверу) понять можете? При редиректе происходит внешний редирект в браузере, и браузер соответственно прокручивает страницу если имеется якорь. А при реврайте этого не происходит. Кто вам ее крутить будет, сервер? Якорь - клиентская часть, реврайт - серверная.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий