Подтвердить что ты не робот

Субдомены CakePHP с htaccess

Я использовал следующие правила в файле htaccess в других приложениях, чтобы перенаправить пользователей из папки в поддомен, но загружать содержимое из этой папки при доступе к этому поддомену.

# REWRITE SUBDOMAIN TO FOLDER
RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$
RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L]

# REWRITE FOLDER TO SUBDOMAIN
RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC]
RewriteRule ^ http://admin.cameron.com/%1 [R=301,L]

Итак, если я перехожу к: http://cameron.com/admin Я заканчиваю на http://admin.cameron.com/

Но содержимое загружается из http://cameron.com/admin

Однако это не работает для CakePHP 2.x из-за его переписывания, по-видимому...

В моем файле htaccess в /app/webroot у меня есть:

<IfModule mod_rewrite.c>

    RewriteEngine On

    # CAKEPHP RULES
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

    # REWRITE SUBDOMAIN TO FOLDER
    RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$
    RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L]

    # REWRITE FOLDER TO SUBDOMAIN
    RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC]
    RewriteRule ^ http://admin.cameron.com/%1 [R=301,L]

</IfModule>

Если я перехожу к: http://cameron.com/admin, он просто пытается загрузить AdminController и не перенаправляет вас, и если я перейду к: http://admin.cameron.com/, я просто получу 500 Внутреннюю ошибку сервера.

Любые идеи о том, как заставить это работать на CakePHP?

4b9b3361

Ответ 1

CakePHP и почти любая другая инфраструктура PHP анализируют $_SERVER ['REQUEST_URI'], чтобы перенаправить ваш запрос на конкретный контроллер

подробнее здесь: https://github.com/cakephp/cakephp/blob/2.6/lib/Cake/Network/CakeRequest.php#L230,

поэтому вам просто нужно, чтобы параметры URI запроса SAME для вашего перенаправления получили приложение.

Для вашего старого местоположения это было "/admin", для нового местоположения оно должно быть одинаковым, но вы не хотите его передавать, поэтому лучше изменить задачу следующим образом:

"Когда вы перейдете на admin.site.com, вы будете перенаправлены на сайт .com/admin".

Это можно сделать так:

RewriteRule ^([^.]+)\.example\.com http://example.com/$1

Это не рабочий пример правила, потому что вам также нужно переписать URI субдоменного запроса, чтобы все работало, и оно зависит от ваших требований, но может быть как-то так:

RewriteRule ^([^.]+)\.example\.com(.*) http://example.com/$1/$2

UPD: реальный пример

$ cat app/webroot/.htaccess 
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    RewriteCond %{HTTP_HOST} ^admin.example.com
    RewriteRule ^(.*)$ http://example.com/admin/$1 [P,L,NC]
</IfModule>

Ответ 2

  <IfModule mod_rewrite.c>
  #standard cake htaccess stuff
  ...

  RewriteCond %{HTTP_HOST} ^profile\.thechatfun\.com$ [NC]
  RewriteRule ^(.*)$ http://www.thechatfun.com/users/profile/$1 [R=301,L]

  RewriteCond %{HTTP_HOST} ^chat\.thechatfun\.com$ [NC]
  RewriteRule ^(.*)$ http://www.thechatfun.com/chats/index/$1 [R=301,L]

</IfModule>