0

アプリをビルドする必要があり、これには 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

codeigniter が次のようなセグメント化された形式でリンクを取得するように、.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

ありがとう

編集。数時間かけて、次のようなことを試しました。

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 パラメータがあるのはなぜですか? もう 1 つの質問ですが、その会社が変更され、リンクに追加のパラメーターが追加された場合、書き換えは壊れますか? では、どうすればより普遍的になることができるでしょうか?

4

2 に答える 2

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/、2 番目のルールはクエリ文字列の各をパスの独自の部分に追加します。したがって、次のような 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 ファイルの代わりに)配置する場合は、各ルールの の/前に を追加します。これは、htaccess のルールでは、URI との照合時に先頭のスラッシュが取り除かれているためです。sms^/sms

于 2012-01-08T06:08:29.547 に答える
0

コントローラーでGETを処理するだけです。大丈夫です。GET は悪ではありません。

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

次に、特別なルートを処理するために、より簡単に書き直すことができます

于 2012-01-08T06:08:57.057 に答える