2012-01-08 4 views
0

Мне нужно создать приложение, и для этого я использую codeigniter. Компания посылает мне ссылку в формате, который не может быть изменен с их сторон Link, как:apache rewrite url для 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, так что 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 

Thanks

Редактировать. провел несколько часов и пытался что-то вроде этого:

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 Params в заканчивается? И еще один вопрос, если эта компания изменится и добавит дополнительный параметр в ссылку, переписывание будет нарушено? Тогда как это может быть более универсальным?

ответ

1

Попробуйте размещение этого в ваш файл .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.

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

+0

Пробовал доступ он возвращает запрошенную URL/смс/MyFunction/12345678/msg15/777/CC/someoper/1234567892/11111/msg не найден. CI использует ссылку как http://sms.airtel.lv/index.php/sms/doParse и я не могу получить доступ к нему без index.php CI имеет «Включить строки запроса» Может быть, это будет лучше переписать URL для строки запроса, например sms.php? phone .... to sms.php? c = sms & m = doParse & phone = 12345678 & msg = msg15 & code = 777 & country = cc & oper = someoper & mssid = 1234567892 & date = 11111 & keyword = msg Я просто хочу сделать, если в ссылке будет быть новым параметром, он не будет тормозить мою логику, потому что в сегментах нет имен GET, только значения – rtt

0

просто обрабатывайте GET в контроллере. все в порядке, GET is not evil.

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

, то вы можете иметь более простой рерайт обрабатывать специальный маршрут

+0

У меня есть ссылка в формате http://sms.airtel.lv/sms.php?телефон = 12345678 & тзд = msg15 и код = 777 & страна = куб.см & Опер = someoper & mssid = 1234567892 & дата = 11111 & ключевое слово = тзд CI можно разобрать ссылку, если она будет в формате, как /sms.php?c=controller&m=method?phone=12345678 .... и т. д., мне нужно переписать ссылку и добавить в c = controller & m = метод, чтобы начать работу с $ _GET – rtt