X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Mod_rewrite, или спецсимволы в URL
Eugene_hb
Eugene_hb
Topic Starter сообщение 5.11.2010, 3:00; Ответить: Eugene_hb
Сообщение #1


Помогите победить такую штуку.

Нужно реализовать поиск по сайту. Самое главное - строка-запрос должна присутствовать в URL с результатом поиска. Например, ищем "слово1", а страница с результатом будет иметь URL http://hostname.ru/search/слово1.

Сделал. Работает. Но если руками в адресной строке браузера написать
http://hostname.ru/search/%
то он ругается, что "Bad Request"

В .htaccess при этом указано
RewriteRule ^search\/(.*)\/?$ index.php?act=search&txt=$1
Пробовал переписать как
RewriteRule ^search\/([^/]+)\/?$ index.php?act=search&txt=$1
и результат тот же самый.

Ну не любит он этот знак процента!
Если этот % ввести в форме поиска на странице, то он уже передается как
http://hostname.ru/search/%25
и все обрабатывается как и положено. Но хотелось бы, чтобы и если просто в адресе этот % поставить, то ошибки не возникало...

Это как-то можно победить?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 7.11.2010, 2:48; Ответить: ZiTosS
Сообщение #2


EugeneM, сколько попробовал, ничего не работает. Все варианты что есть в интернете:
http://www.sitepoint.com/forums/showthread.php?t=143541
http://stackoverflow.com/questions/3996726...ercent-from-url

Хотя на официальном сайте Apache.org в наличии флаг B:
'B' (escape backreferences)

Apache has to unescape URLs before mapping them, so backreferences will be unescaped at the time they are applied. Using the B flag, non-alphanumeric characters in backreferences will be escaped. For example, consider the rule:

RewriteRule ^(.*)$ index.php?show=$1

This will map /C++ to index.php?show=/C++. But it will also map /C%2b%2b to index.php?show=/C++, because the %2b has been unescaped. With the B flag, it will instead map to index.php?show=/C%2b%2b.

This escaping is particularly necessary in a proxy situation, when the backend may break if presented with an unescaped URL.

Пробовал данный флаг - с используемыми в адресной строке спецсимволами + (обозначают пробел). Всё сработало, строка вывелась.
Но с процентом всё не так просто - сервер никак не хочет понимать, что мы хотим % использовать как символ, а не как предваряющий спецсимвол 16-ричного представления какого-либо символа.
Как от этого избавиться, честно сказать, не знаю. Даже в Wiki его не используют - http://www.wikipedia.org/%

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Если статья не в индексе Google - она уникальна или нет?
7 uahomka 1670 Вчера, 22:59
автор: Liudmila
Открытая тема (нет новых ответов) Создать видеоканал лучше в ютуб или телеграм?
20 uahomka 3589 20.4.2024, 20:56
автор: Vmir
Открытая тема (нет новых ответов) Где больше пробив на кликандер или попандер или попап трафике?
1 Boymaster 682 20.3.2024, 9:50
автор: Skyworker
Горячая тема (нет новых ответов) Выполню качественную верстку макетов или разработка собственного, быстро и не дорого
от 45$
123 webche 117301 17.3.2024, 7:09
автор: webche
Открытая тема (нет новых ответов) От какого экрана будут меньше уставать глаза OLED или IPS?
3 metvekot 1038 12.3.2024, 16:25
автор: MisterBit


 



RSS Текстовая версия Сейчас: 26.4.2024, 0:15
Дизайн