Исключить корневую папку из приложения CakePHP

Я пытаюсь исключить каталог первого уровня из Cake (приложение для корневой папки), так как он должен содержать другое приложение.

/ содержит приложение

/ разработка/содержит проверенную версию приложения

Структура каталогов:

Общая папка

.htaccess [modified]
app
    .htaccess [unmodified]
    webroot
        .htaccess [unmodified]
        index.php [unmodified]
        ...
    ...
lib
    Cake
    ...
development
    app
        webroot
            index.php [dumps $_SERVER for test purposes]

Итак, моя структура разработки по-прежнему не имеет приложения внутри (или .htaccesses), просто чтобы проверить, работает ли мой root .htaccess.

Это моя модификация корня .htaccess:


   RewriteEngine on

   RewriteCond %{REQUEST_URI} ^/development.*
   RewriteRule (.*) - [L]

   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

Что происходит:

/ development/показывает индекс apache в папке разработки

/ development/app/показывает индекс apache в папке приложения

/ development/app/webroot показывает корневое приложение (запрос захвачен, несмотря на соответствие URL-адреса разработки).

/ development/app/webroot СЛЕДУЕТ показать мне мой файл /development/app/webroot/index.php, правильно?

Какого черта я здесь не хватает?

1
было бы проще создать виртуальный хост (возможно, с другим портом) для размещения вашего сайта разработки? и этот виртуальный хост будет указывать на/development/app/webroot .. или, возможно, на субдомен
добавлено автор pleasedontbelong, источник
Обычно, да. Но мне нужно протестировать стороннюю SOAP-службу, которая использует SSL-сертификаты, установленные на главном сервере, поэтому мне нужно иметь ее в подкаталоге. Это также вопрос разрешения общего вопроса. ИМХО, любая платформа должна быть способна легко сожиться с другими системами, присутствующими на сайте, а не зависеть от корневого пространства.
добавлено автор Vanja D., источник

1 ответы

Это оказалось ошибкой на моем сервере.

Результирующий .htaccess , который работает сейчас:


   RewriteEngine on

   RewriteCond %{REQUEST_URI} !^/development(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]

   RewriteCond %{REQUEST_URI} !^/development(?:$|/)
   RewriteRule    (.*) app/webroot/$1 [L]


По неизвестным мне причинам, если я SSH'd к моей учетной записи пользователя и отредактировал файлы .htaccess через командную строку, это не сработает!

Когда я загружал те же файлы (через SFTP), он начал работать правильно.

Я использую cPanel (11.34.1) для CentOS (5.9).

Другой пример: если вы хотите «игнорировать» несколько подпапок в установке CakePHP, вы можете использовать этот шаблон:


   RewriteEngine on

   # /development, /version1.5 and /version1.8 directories
   # they all hold independent apps
   # or completely non-cake-related content

   RewriteCond %{REQUEST_URI} !^/(?:development|version1\.5|version1\.8)(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]

   RewriteCond %{REQUEST_URI} !^/(?:development|version1\.5|version1\.8)(?:$|/.*)
   RewriteRule    (.*) app/webroot/$1 [L]


Обратите внимание, что обе команды RewriteCond идентичны.

3
добавлено
\. в шаблоне используется для захвата фактической точки. Без \, точка означает любой символ .
добавлено автор Vanja D., источник
Поместите этот фрагмент на Gist , чтобы вы могли его любить позже. ;)
добавлено автор Vanja D., источник