Я использовал следующие правила в файле 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?
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>
<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>