Как экранировать решетку # в .htaccess ?

12
donc
На сайте с 16.01.2007
Offline
686
#11
Дикий пионер:
Не джавой, а джаваскриптом - это разные вещи, это раз.
Если на клиенте не включен яваскрипт (у ноля целых хрен десятых процентов параноиков), то будут нормальные ссылки, зайдите в ИЕ8, например, на твиттер. Это если создатели сайта позаботились.
Кто сегодня отключает js - сам себе злобный буратино, это два.

а при чем тут твиттер

Это у них там свои приблуды с аджаксами

я то говорю о нормальных якорях, которые браузеры читают без джавыСкрипта, буде вам так угодно. Ибо ссылка с решеткой - это ссылка на якорь на странице, изначально.

Продвижение сайтов от 25 000 в мес, прозрачно, надежно https://searchengines.guru/ru/forum/818412 , но не быстро, отзывы
ДП
На сайте с 23.11.2009
Offline
203
#12

А мы говорим не о нормальных якорях, а о решетках, которые являются значениями параметров.

Вы несколько не в тему с обычными якорями, которые, к слову, на сервер вообще не уходят.

ТС, при таком правиле в htaccess надо будет сделать

urldecode($_SERVER['REQUEST_URI']); чтобы получить строку с решеткой.

K
На сайте с 09.06.2010
Offline
13
#13
RewriteRule ^player/(.*)/([\.0-9]+):([0-9]+)$ /dir/script.php?ip=$2&port=$3&name=$1 [L,QSA]

С таким правилом тоже ругается.

Если при таком правиле запросить http://example.com/player/%23/00.00.000.000:00000,

то сервер выдаст такую ошибку: The requested URL /player/#00.00.000.000:00000 was not found on this server.

Но если запросить http://example.com/player/%23a/00.00.000.000:00000, то нужная страница откроется, но скрипту параметр не передастся. Так получается с любым символом после %23.

В логе апача появится с виду правильная строчка

[17/Jan/2012:12:09:10 +0300] "GET /player/%23a/80.90.116.116:27001 HTTP/1.0" 200 281 "-" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.60"

Выходит, что решетка затирает следующий символ, если он является слешем.

Я откровенно говоря не очень понял почему, слезно прошу помочь разобраться

---------- Добавлено в 11:14 ---------- Предыдущее сообщение было в 11:14 ----------

Дикий пионер, Сейчас попробую

хостинг серверов cs 1.6 (http://servohost.ru)
donc
На сайте с 16.01.2007
Offline
686
#14
Дикий пионер:
А мы говорим не о нормальных якорях, а о решетках, которые являются значениями параметров.
Вы несколько не в тему с обычными якорями, которые, к слову, на сервер вообще не уходят.

Согласен - не в тему.

я вообще не понимаю - зачем это нужно на том же твитттере. Ему же все равно приходится работать и при отлюченной JS

ДП
На сайте с 23.11.2009
Offline
203
#15

Да банально запросв меньше к серверам (стили, скрипты, картинки), с учетом посещаемости твиттера это нормальная такая экономия выходит. Ведь тех, у кого отключен яваскрипт - крайне мало, поэтому экономия.

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

ТС, ты мало того что нормальна задачу не можешь описать так еще и немного тупишь. Сказали же что решетка (и все что после нее) на сервере не передается. Если передать кодированный символ ставьте флаг [NE]

Хотя он no URI escaping of output, но возможно сработает

K
На сайте с 09.06.2010
Offline
13
#17
siv1987:
ТС, ты мало того что нормальна задачу не можешь описать так еще и немного тупишь. Сказали же что решетка (и все что после нее) на сервере не передается. Если передать кодированный символ ставьте флаг [NE]

Хотя он no URI escaping of output, но возможно сработает

Не передается? Почему же тогда без использования mod_rewrite и htaccess все прекрасно работает?

Попробовал

RewriteRule ^player/(.*)/([\.0-9]+):([0-9]+)$ /dir/script.php?ip=$2&port=$3&name=$1 [NE]

И тут действительно, после решетки ничего не передается.

Я уже запутался во всем этом

---------- Добавлено в 13:36 ---------- Предыдущее сообщение было в 13:08 ----------

Поздравьте меня! Наконец-то все заработало!

Оказалось, надо было добавить флаг B, который экранирует спецсимволы еще перед обработкой url mod_rewrite

gormarket
На сайте с 29.12.2010
Offline
47
#18

kajfat, Ваше регулярное выражение в RewriteRule не срабатывает, Вы забыли включить в него решетку

правило


RewriteRule ^player/([^/]+)/#\ ?([.0-9]+):\ ?([0-9]+)$ index.php?ip=$2&port=$3&name=$1 [L,QSA]

сработает для

http://example.com/player/dir/%23%2080.90.116.116:27001

(пробел после решетки и двоеточия не обязательный, но допустимый)

флаги В или NE может и нужны, но у меня на локалке и без них работает (я правда для тестов добавлял флаг R=301 поскольку у меня нет обработчика script.php и чтоб видно было результаты в адресной строке браузера )

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
K
На сайте с 09.06.2010
Offline
13
#19

Проблема в том, что решетка в htaccess обозначает комментарий, и просто так ее туда не засунешь ;)

У меня по-крайней мере не получилось

gormarket
На сайте с 29.12.2010
Offline
47
#20
kajfat:
Проблема в том, что решетка в htaccess обозначает комментарий, и просто так ее туда не засунешь

может попробовать решетку заэкранировать ?

RewriteRule ^player/([^/]+)/\#\ ?([.0-9]+):\ ?([0-9]+)$ index.php?ip=$2&port=$3&name=$1 [L,QSA]

у меня работает и со слешем перед решеткой

12

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