С этим правилом перезаписи RewriteRule ^(.*)$ /index.php?/$1
, вот несколько примеров перезаписей, которые происходят:
http://www.mysite.com
=>
http://www.mysite.com/index.php?/
(на самом деле, это может вообще не переписываться)
http://www.mysite.com/mycontroller/mymethod/?ref=p&t2=455
=>
http://www.mysite.com/index.php?/mycontroller/mymethod/?ref=p&t2=455
http://www.mysite.com/?ref=p&ts=455
=>
http://www.mysite.com/index.php?/?ref=p&t2=455
Первый из них будет работать независимо от того, переписывается он или нет. CodeIgniter обрабатывает либо пустую строку запроса (что легко), либо строку запроса просто "/".
Второй (который также работает) переписывается, но CodeIgniter может обработать строку запроса, которая составляет /mycontroller/mymethod/?ref=p&t2=455
. CI превращает это в массив сегментов как
[0] => mycontroller
[1] => mymethod
[2] => ?ref=p&t2=455
Индекс массива 2 в конечном итоге игнорируется всеми вашими действиями.
Третий (который не работает, переписывается, и CodeIgniter вообще не может обработать свою строку запроса. Его строка запроса переписывается в: /?ref=p&t2=455
. Это делает для массива сегменты, которые выглядят так:
[0] => ?ref=p&t2=455
, который не соответствует ни одному контроллеру на вашем сайте.
Возможно, вы все исправите, изменив RewriteRule с
RewriteRule ^(.*)$ /index.php?/$1
до
RewriteRule ^(.*)$ /index.php/$1
в этот момент вы, вероятно, захотите изменить конфигурацию uri_protocol
обратно на PATH_INFO
.