2013-10-02 2 views
4

Я пытаюсь установить приложение CakePHP в подпапку, но запустил его из корневого домена, например, запросы пользователя domain.co.uk, и они получают веб-сайт по адресу {DOCUMENT_ROOT}/version-13/app/webroot.Как запустить приложение CakePHP в подпапке из корневого домена?

Хостинг установки не позволяет мне изменить корень документа поэтому у меня есть следующий файл .htaccess в корне:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/
    RewriteRule ^$ version-13/app/webroot/ [L] 
    RewriteRule (.*) version-13/app/webroot/$1 [L] 
</IfModule> 

Это, как представляется, чтобы сделать работу. Тем не менее, Cake обнаруживает подпапку и добавляет ее ко всем URL-адресам, которые она создает (например, $this->Form->create() действия и т. Д.), Поэтому я получаю формы, размещенные на domain.co.uk/version-13/signup вместо domain.co.uk/signup.

Я знаю, что это, вероятно, будет чем-то простым, но я ударяю о кирпичную стену. Независимо от того, что я пытаюсь, я не могу заставить его работать!

+0

Почему вы загружаете свои версии в разных местах? Вы изучили [контроль версий] (http://en.wikipedia.org/wiki/Revision_control)? Например: [git] (http://git-scm.com/) или [subversion] (http://subversion.apache.org/)? – Jelmer

+0

Я использую Git для управления версиями, это больше для развертывания. Я ограничен тем, что могу сделать на этом хосте (и у меня нет возможности VPS), поэтому идея заключается в том, что я могу «git archive master», загрузить новую версию в отдельную папку, выполнить тестирование, затем переключиться пути для обновления с нулевым временем простоя. – Tom

+0

Ах, хорошо. Звучит творческий :) – Jelmer

ответ

3

Трудно понять вашу установку, вы должны объяснить ее больше. Но если бы я получил это право, проверить /app/config/core.php:

Configure::write('App.fullBaseUrl', 'http://example.com'); 
+1

Установка этой опции не имела никакого эффекта. Однако я заметил, что установка 'Configure :: write ('App.baseUrl,'/');' did. Теперь он работает как ожидалось - все созданные URL-адреса не имеют префикса версии. Благодаря! – Tom

0

Измените ваш RewriteBase / на RewriteBase /version-13/ (в вашем .htaccess), и вы должны быть установлены прямо.

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

Обратите внимание, что вы можете иметь multiple apps at one core. Это может быть полезно для вас «версирование».

Ps. после быстрого поиска Google я нашел следующее. Не читал это хорошо, но похоже, что он делает то же самое. http://cookingwithcakephp.blogspot.nl/2008/04/installing-cakephp-into-subdirectory.html

+0

Спасибо, я попробовал ваше предложение (и те из связанной статьи - я был там до того, как я разместил здесь!). Установка RewriteBase в папку версии работала одинаково - страницы правильно отвечали на маршруты в route.php, но сгенерированные URL-адреса (например, для форм) включают подпапку (например, '

'). – Tom

+0

Зачем ему не нужно включать подпапку в форму? Вы хотите, чтобы он перешел в '/ version-13/signup'? В противном случае это будет '/ signup', которого нет, если я правильно вас понимаю. – Jelmer

+0

'/ signup' - это маршрут, который я подключил в route.php - это« довольно url », поэтому у меня нет формата'/{controller}/{action} 'по умолчанию. Если сайт не находится в подпапке, любая форма, которую я генерирую с помощью '$ this-> Form-> create()' POSTs для '/ signup'. Однако, когда в подпапке я вижу страницу в '/ signup', но все сгенерированные URL-адреса включают подпапку. Я хочу, чтобы сайт работал так, как будто нет подпапки и ведет себя так, как будто это в корне. Установка 'Configure :: write ('App.baseUrl,'/');' сделал трюк. – Tom

Смежные вопросы