Конфигурация CakePHP .htaccess mod_rewrite для исключения определенной папки / URL - PullRequest
1 голос
/ 12 февраля 2010

У меня установлена ​​CakePHP в подпапке на моем сервере, я хочу установить другое приложение внутри этой подпапки:

root/public_html/subfolder/cake/
root/public_html/subfolder/app/

и т.д.. теперь мне нужно пользовательское приложение, установленное там:

root/public_html/subfolder/my_custom_application/

У меня есть что-то подобное в моем .htaccess:

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

Как я могу настроить его так, чтобы исключить папку "my_custom_application" из этих правил?

Я пробовал это:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    ((?!my_custom_application).*) app/webroot/$1 [L]
</IfModule>

Но я получаю это:

Error:  The requested address '/y_custom_application' was not found on this server.

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

Маурисио.

Ответы [ 3 ]

4 голосов
/ 11 февраля 2012

Как исключить каталог из CakePHP Routing:

Я столкнулся с той же проблемой, что и вы. Я боролся, но наконец нашел то, что сработало.
(я отвечаю, потому что ответ выше не сработал для меня, но это сработало).

Моя структура каталогов:

root/public_html/app/
root/public_html/lib/
root/public_html/plugins/
root/public_html/vendors/
root/public_html/directory_to_exclude/

Что я добавил к стандартной маршрутизации CakePHP:

RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*)

По сути, мне нужно было разрешить людям получать отдельный доступ к подпапке (поскольку у нее есть отдельное приложение). Кроме того, в моем случае я по умолчанию обслуживаю приложение CakePHP из корневого каталога.
Итак, вот как выглядит мой CakePHP 2.x htaccess:

Обновлен .Htaccess (это работает для меня)

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_URI} !^/directory_to_exclude/(.*)
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

В вашем случае, я понимаю, вам нужно это для работы в подпапке; вот мой скорректированный htaccess, у меня не было возможности проверить это, но я верю, что это (или что-то близкое) будет работать:

Конечный продукт (для подпапки)

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_URI} !^/subfolder/directory_to_exclude/(.*)
   RewriteRule    ^$ subfolder/app/webroot/    [L]
   RewriteRule    (.*) subfolder/app/webroot/$1 [L]
</IfModule>
2 голосов
/ 12 февраля 2010

Поставьте это перед RewriteRule строками:

RewriteCond %{REQUEST_URI} !^/my_custom_application
0 голосов
/ 05 ноября 2016

Вы должны заменить dir_to_exclude на ваше имя dir.

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]
   RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude)(?:$|/)
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

Если вы хотите иметь более одного исключенного каталога, вы должны добавить их, разделенные |

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/)
   RewriteRule    ^$ app/webroot/    [L]
   RewriteCond %{REQUEST_URI} !^/(?:dir_to_exclude|additional_dir_to_exclude)(?:$|/)
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>
...