apache переписать URL для codeigniter - PullRequest
0 голосов
/ 08 января 2012

Мне нужно создать приложение, и я использую codeigniter для этого. Компания отправляет мне ссылку в формате, который нельзя изменить с их стороны Ссылка как:

someurl.com/sms.php?phone=12345678&msg=msg15&code=777&country=cc&oper=someoper& mssid=1234567892&notcharged=0&date=2011-12-26+23%3A31%3A27&keyword=msg&created=2011-12-26+23%3A31%3A26

Как мне переписать его с помощью .htaccess, чтобы кодировщик получал ссылку в сегментированном формате, например

someurl.com/sms/myfunction/12345678/msg15/777/cc/someoper/1234567892/0/2011-12-26+23%3A31%3A27/msg/2011-12-26+23%3A31%3A26

Спасибо

Edit. Потратил несколько часов и попробовал что-то вроде этого:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^phone\=([^&]+)\&msg\=([^&]+)\&code\=([^&]+)\&country\=([^&]+)\&oper\=([^&]+)\&mssid\=([^&]+)\&date\=([^&]+)\&keyword\=([^&]+)$
RewriteRule ^test\.php$ /sms/doParse/%1/%2/%3/%4/%5/%6/%7/%8 [R,L]

А затем наберите url следующим образом:

http://test.airtel.lv/test.php?phone=12345678&msg=msg15&code=777&country=cc&oper=someoper&mssid=1234567892&date=2011-12-26+23%3A31%3A27&keyword=msg

Я получил это:

http://test.airtel.lv/sms/doParse/12345678/msg15/777/cc/someoper/1234567892/2011-12-26+23%253A31%253A27/msg?phone=12345678&msg=msg15&code=777&country=cc&oper=someoper&mssid=1234567892&date=2011-12-26+23%253A31%253A27&keyword=msg

Почему возвращаемый URL имеет GET-параметры в конце? И еще один вопрос, если эта компания изменится и добавит дополнительный параметр в ссылку, перезапись будет нарушена? Тогда как это может быть более универсальным?

Ответы [ 2 ]

1 голос
/ 08 января 2012

Попробуйте поместить это в файл .htaccess в соответствующем месте в корне документа:

RewriteEngine on

RewriteRule ^sms.php$ /sms/myfunction/ [L]

RewriteCond %{QUERY_STRING} ^[^=]+=([^&]+)&?(.*)
RewriteRule ^sms/myfunction/(.*)$ /sms/myfunction/$1/%1?%2 [L]

Первый RewriteRule изменяет часть URI /sms.php на /sms/myfunction/, а второе правилодобавит каждое значение в строке запроса в свою часть пути.Таким образом, для URL-адреса, подобного следующему: http://someurl/sms.php?a=1&b=2&c=3&d=4&e=5&f=6&g=7&h=8&i=9, URI будет внутренне переписан в /sms/myfunction/1/2/3/4/5/6/7/8/9.Не проверяется, какие имена переменных есть в строке запроса, только значение извлекается и добавляется к пути URI.

Если вы поместите этот код в конфигурацию сервера или vhost (вместо файла htaccess)добавьте / перед sms в каждом из правил, чтобы оно гласило ^/sms, поскольку правила в htaccess удаляют начальную косую черту при сопоставлении с URI.

0 голосов
/ 08 января 2012

просто обработайте GET в вашем контроллере. ничего страшного, ПОЛУЧИТЕ не зло.

parse_str($_SERVER['QUERY_STRING'], $_GET);

тогда вы можете сделать более простую переписку для обработки специального маршрута

...