Проблема с Codeigniter и RewriteRule

#apache #.htaccess #codeigniter

#apache #.htaccess #codeigniter

Вопрос:

Я некоторое время ломал голову над этим none. Это правило перезаписи, которое у меня есть на данный момент:

 Options  FollowSymlinks
DirectoryIndex index.php

RewriteEngine on
RewriteRule ^ext/(.*)$ index.php/cproposal/key/$1 [NC]
  

По сути, я пытаюсь получить

 http://localhost/cvc/ext/12445345346
  

для перезаписи в

 http://localhost/cvc/index.php/cproposal/key/12445345346
  

Однако Codeigniter выдает 404. Если я изменю index.php/cproposal/key/$1 часть правила на что-то бессмысленное вроде Codeigniter license.txt это найдено в каталоге, тогда это работает, но все, что действительно связано с самим Codeigniter, выдает 404.

Есть идеи, где я ошибаюсь?

Комментарии:

1. О, и я должен упомянуть, что если я изменю вторую часть RewriteRule на полный URL, тогда это сработает.

Ответ №1:

mod_rewrite это здорово, но у Codeigniter уже есть встроенное решение для чего угодно в вашем приложении Codeigniter.

Попробуйте добавить это в свой config/routes.php :

 $route['ext/(:num)'] = 'cproposal/key/$1';
  

Это привело бы к маршрутизации запросов на:

http://localhost/cvc/ext/{any_number}

Для

http://localhost/cvc/cproposal/key/{requested_number}

index.php Будет необязательным и зависит от вашей конфигурации CI. Другими словами, если вы уже используете его — оно будет в URL. Если нет, то этого не должно быть.

Все маршруты CI могут использовать регулярные выражения в дополнение к встроенным подстановочным знакам (:num) и (:any) , поэтому не стесняйтесь проявлять творческий подход.

Комментарии:

1. Спасибо, но сейчас он ведет себя странно, он не загружает сеансы, если я не использую /cvc / ext /key / 12423542?

2. Что именно означает «не загружать сеансы»? И спасибо, что подтвердили, что это в вашем приложении CI, мой ответ был бы бесполезен для чего-либо за его пределами, но это лучшее (и наиболее переносимое) решение, если оно находится в CI. Кроме того, какая именно версия CI?

3. Не загружая сеансы, я имею в виду, что не удается загрузить какие-либо данные из сеансов на этой странице. Версия CI, которую я использую, 2.0.2. Спасибо за помощь.

4. Если сам маршрут работает, предпочтительно, чтобы вы открыли новый вопрос, поскольку это отдельная проблема. Если вы это сделаете, пожалуйста, укажите код вашего контроллера.

5. Кстати, извините, что не могу прямо ответить на ваш вопрос, но, похоже, это должно сработать. Вы пробовали удалять index.php/ из RewriteRule или обязательно определяли его перед другими правилами? Было бы неплохо увидеть весь .htaccess