данные удаляются после амперсанда в URL даже при использовании urlencode - PullRequest
1 голос
/ 15 марта 2011

Я передаю амперсанды в URL, который входит в запрос get

, например

http://www.soundshelter.co.uk/label/Hit & Run

Я попытался ввести код &, чтобы он был действительным URL

http://www.soundshelter.co.uk/label/Hit%20%26%20Run

но секция URL & Run обрезается в запросе get.

Я думаю, это как-то связано с моим mod_rewrite

RewriteRule ^label/([^/]*)$ /index.php?label=$1 [NC]

запрос на получение

$label = $_GET['label'];

Есть идеи?

Приветствия

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

С документация :

'B' (escape-ссылки)

Apache должен удалить URL-адреса перед их отображением, поэтому обратные ссылки будут быть освобожденным в то время, когда они применяется. Используя флаг B, не буквенно-цифровые символы в обратные ссылки будут экранированы. За Например, рассмотрим правило:

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

Это отобразит /C++ на index.php?show=/C++. Но это также карта /C%2b%2b до index.php?show=/C++, потому что %2b был спасен. С флагом B он вместо этого будет отображаться до index.php?show=/C%2b%2b.

Это экранирование особенно необходимо в ситуации с прокси, когда бэкэнд может сломаться если представлен с неэкранированным URL.

Итак, попробуйте:

RewriteRule ^label/([^/]*)$ /index.php?label=$1 [BNC]

Также, зайдя на вашу страницу, мне кажется, что у вас дальнейшие проблемы с PHP Я предлагаю вам опубликовать больше кода контекста.

1 голос
/ 15 марта 2011

Попробуйте изменить правило перезаписи на

RewriteRule ^label/([^/]*)$ /index.php?label=$0 [NC]
...