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

我如何用 .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]

然后像这样输入网址:

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 参数?还有一个问题,如果该公司将更改并添加额外的链接参数,重写将被破坏?那么如何才能更普遍呢?

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/,第二个规则会将查询字符串中的每个附加到路径的自己的部分。所以像这样的 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 匹配时会去除前导斜杠。

于 2012-01-08T06:08:29.547 回答
0

只需处理控制器中的 GET 即可。没关系,GET 不是邪恶的。

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

那么您可以进行更简单的重写来处理特殊路线

于 2012-01-08T06:08:57.057 回答