apache переписать URL для codeigniter
Мне нужно создать приложение, и я использую для этого codeigniter. Компания отправляет мне ссылку в формате, который нельзя изменить со своей стороны. Ссылка выглядит так:
someurl.com/sms.php?phone=12345678&msg=msg15&code=777&country=cc&oper=someoper& mssid=1234567892¬charged=0&date=2011-12-26+23%3A31%3A27&keyword=msg&created=2011-12-26+23%3A31%3A26
Как я могу переписать его с.htaccess, чтобы codeigniter получил ссылку в сегментированном формате, например
someurl.com/sms/myfunction/12345678/msg15/777/cc/someoper/1234567892/0/2011-12-26+23%3A31%3A27/msg/2011-12-26+23%3A31%3A26
Спасибо
Редактировать. Потратил несколько часов и попробовал что-то вроде этого:
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 ответа
Попробуйте это, поместив это в ваш файл.htaccess в соответствующем месте в корне вашего документа:
RewriteEngine on
RewriteRule ^sms.php$ /sms/myfunction/ [L]
RewriteCond %{QUERY_STRING} ^[^=]+=([^&]+)&?(.*)
RewriteRule ^sms/myfunction/(.*)$ /sms/myfunction/$1/%1?%2 [L]
Первый RewriteRule изменяет /sms.php
часть URI для /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.
Просто обработайте GET в вашем контроллере. все в порядке, получить не зло.
parse_str($_SERVER['QUERY_STRING'], $_GET);
тогда вы можете иметь более простой переписать для обработки специального маршрута