Переписывание Apache съедает один уровень побега (% 23) - PullRequest
1 голос
/ 22 февраля 2012

Я хочу использовать модные URL-адреса для фильтра тегов на моем веб-сайте.URL должен выглядеть как http://example.com/source/+tag1+tag2.. Этот фильтр должен фильтровать все элементы, отмеченные тегами tag1 и tag2.Для этого я придумал следующее правило перезаписи, которое я сохранил в корневом каталоге сайта:

RewriteRule ^([^+]+)(\+.+)$ $1?tags=$2 [L]

Это прекрасно работает для всех обычных имен тегов, но не работает для имени тега "c #».Я знаю, что хеш-символ не отправляется на сервер, поэтому имя тега закодировано в URL-адресе, а ссылка на странице HTML выглядит следующим образом: ./+c%23 Но целевая страница будет видеть только «c» в своем параметре теговостальное и что-либо после «#» больше не существует.

Я включил ведение журнала перезаписи Apache и увидел, что он уже регистрирует входящий URL-запрос, например …/+c#.Это заставило меня подумать, что может потребоваться еще один уровень побега.Поэтому я попытался с% 2523, который на самом деле успешно прошел перезапись, и на моей странице появилась вся строка «c #».

Но опять же, когда я захожу на страницу с ее внутренним URL, таким как ./?tags=c%23, онауже работает тоже.Так почему же Apache съедает один уровень побега?Есть ли скрытый флаг перезаписи, который я могу использовать, чтобы избежать этого?Нужно ли использовать общедоступные URL-адреса в двойном коде, чтобы мои модные URL-адреса работали?Или это будет слишком грязно, и я должен вместо этого просто переименовать мой тег в "csharp"?

1 Ответ

1 голос
/ 22 февраля 2012

Я думаю, вам нужен флаг B (поэтому используйте [L, B])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...