Как прописать RewriteRule со знаком вопроса в строке?

Суть такая:
Есть сайт на codeigniter. Файл index.php удален из внешних url, в .htaccess прописан внутренний редирект:
RewriteRule ^(.*)$ /index.php?/$1 [L]

В Google Webmaster обнаружены проиндексированные ссылки такого вида:
http://site.ru/index.php?/product/oki_c9655

Понятное дело, это дубли тех же страниц, но без "index.php?". Соответственно, необходимо в .htaccess настроить редирект с таких страниц на страницы без "index.php?".
Если бы в url присутствовал просто "index.php", то проблема решалась бы таким редиректом:
RewriteRule ^index.php/(.*)$ /$1 [R=302,L]
и он работает.
Однако, попытка настроить такой редирект:
RewriteRule ^index.php?/(.*)$ /$1 [R=302,L]
не приводит ни к чему.
Проблема, судя по всему, в том, что знак вопроса рассматривается как начало части url с параметрами, что в конкретном случае не так. Как прописать правило, что бы оно работало следующим образом:
http://site.ru/index.php?/product/oki_c9655 –> http://site.ru/product/oki_c9655

?

Спасибо.
  • Вопрос задан
  • 1552 просмотра
Решения вопроса 1
taboo1387
@taboo1387 Автор вопроса
Победил я проблему.
В итоге, часть, которая отвечает за преобразование
http://site.ru/index.php?/product/oki_c9655 –> http://site.ru/product/oki_c9655

выглядит так:
RewriteCond %{QUERY_STRING} ^/(.*)$
RewriteRule ^index\.php$ /%1? [R=302,L]

Ошибка Request exceeded the limit of 10 internal redirects due to probable configuration error получалась из-за правила, которое следовало дальше по тексту.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@IceJOKER
Web/Android developer
RewriteCond %{QUERY_STRING} ^/product/oki_([0-9])$ 
RewriteRule ^index /product/oki_%1
Ответ написан
@ShamblerR
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
  RewriteRule ^(.*)index\.php$ http://%{HTTP_HOST}/$1 [R=301,L]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы