APACHE mod_rewrite изменить имя переменной в строке запроса - PullRequest
1 голос
/ 27 марта 2011

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

Запрос получает сообщения из внешней системы, поэтому я не могу контролировать, что они публикуют имя переменной с пробелом в нем. И это делает невозможным использование функции PHP $_GET.

Мне нужно изменить variable%20name на ?new1

И мне нужно изменить переменную2 на новую2

В запросе передано много переменных, но нужно изменить только эти две. Остальные могут остаться прежними или даже исчезнуть.

Итак ?variable%20name=abc&variable2=xyz

Нужно закончить как ?new1=abc&new2=xyz

Кроме того, они могут быть не в этом порядке, и может быть больше переменных

Итак? Переменная% 20name = abc & blah = 123 & blah2 = 456 & variable2 = xyz

Может закончиться как ?new1=abc&new2=xyz

ИЛИ как ?new1=abc&blah=123&blah2=456&new2=xyz

В любом случае все будет в порядке!

Пожалуйста, дайте мне правило mod_rewrite , которое исправит это.

Заранее спасибо!

1 Ответ

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

Анализ строки запроса с помощью mod_rewrite немного затруднителен, должен быть выполнен с помощью RewriteCond и с использованием %n замен в последующем RewriteRule, возможно, проще вручную разбить исходную строку запроса вPHP.

Полная строка запроса (в PHP) может быть найдена в $_SERVER['QUERY_STRING'].

. Вы можете разделить ее, используя preg_split() или explode(), сначала на &,затем на =, чтобы получить пары ключ / значение.


Используя custom%20cbid=123&blahblahblah&name=example в качестве примера.

$params = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $cKeyValue) {
    list ($cKey, $cValue) = explode('=', $cKeyValue, 2);
    $params[urldecode($cKey)] = urldecode($cValue);
}

// Would result in:

$params = array('custom cbid' => 123,
                'blahblahblah' => NULL,
                'name' => example);
...