Cakephp меняет поведение URL

Мы разрабатываем сайт с помощью CakePHP. У нас есть сервер Windows IIS (общий хостинг) с PHP5, который не поддерживает .htaccess или mod_rewrite, но тем не менее у нас есть работающий сайт, и мы разработали много вещей.

Текущая структура URL выглядит примерно так: mydomain/index.php/user/add

Мы хотим изменить это на что-то вроде: mydomain/index.php?controller=user&action=add

Мы хотим сделать это, так как столкнулись с некоторыми неожиданными проблемами с истечением срока действия сеанса, и мы сомневаемся, что это связано с переходом пользователя с одного URL-адреса на другой, например: mydomain/index.php/user/add to mydomain/index.php/list /edit this измените домен для IIS или PHP, что приведет к истечению срока действия сеанса, но торт отлично интерпретирует страницы.

Если есть способ изменить поведение Cake, чтобы он принимал URL-адреса с вопросом и амперсандом, это было бы здорово.

Заранее спасибо.


person happyhardik    schedule 24.08.2009    source источник
comment
Вам не нужен index.php в ваших URL-адресах. Cake предназначен для выполнения действий контроллера как домен/контроллер/действие/параметры.   -  person Jeff L    schedule 24.08.2009
comment
Да, но в нашем случае с IIS ему нужен index.php без index.php, он его не откроет, он пытается найти эту папку и файл index.php внутри нее, что дает 404 не найдено.   -  person happyhardik    schedule 24.08.2009
comment
Вы можете попробовать ISAPI_Rewrite 2 (бесплатно), ISAPI_Rewrite 3 (платно) или модуль перезаписи Microsoft IIS (IIS7).   -  person deizel    schedule 25.08.2009


Ответы (2)


истечение сеанса не вызвано структурой URL. ты проверил?

  1. Configure::write('Session.timeout', '3600'); в core.php. сделай это длиннее
  2. Configure::write('Security.level', 'высокий'); в core.php. сделать его средним или низким
  3. Configure::write('Session.checkAgent', false); в core.php сделайте его ложным. может вызвать проблемы с вызовами ajax
person Funky Dude    schedule 24.08.2009
comment
Привет, я не уверен, безопасно ли снижать уровень безопасности с высокого до низкого или устанавливать false для checkAgent. Можете ли вы указать мне где-нибудь, где я могу найти, что делают эти уровни безопасности и каков будет их эффект? - person happyhardik; 25.08.2009
comment
похоже, вам нужно прочитать строки с 130 по 147 в core.php (код .cakephp.org/source/app/config/core.php#123) - person deizel; 25.08.2009
comment
Это сработало! У нас все еще есть некоторые проблемы, но основная проблема решена. - person happyhardik; 08.09.2009

Вы можете попробовать что-то вроде этого:

1) укажите корневой каталог документа IIS в app/webroot 2) Вызовите свое приложение, перейдя по адресу http://site.com/index.php?url=/user/add

Что касается изменения его на controller=user&action=add, единственное, что я могу предложить, это добавить код в ваш файл index.php для перевода формата «controller=user&action=add» в формат url=/user/add. Вы также можете проверить маршрутизатор, чтобы узнать, есть ли функции, которые вы можете использовать для изменения этих вещей.

Если вам нужна дополнительная помощь, я бы разместил вопрос на irc.freenode.net #cakephp

person Dooltaz    schedule 24.08.2009
comment
Спасибо за ответ, Дултаз! Это было полезно. - person happyhardik; 08.09.2009