Ответ 1
Вы можете выполнить требуемую переписывание, используя "Условие перезаписи" для разных доменов:
На моей машине я создал структуру папок, например
public_html
-app
-webroot
-local
-app
-webroot
webroot и локальный каталог в папке public_html
, а затем каталог приложений и webroot в локальной папке.
Теперь я создал запись виртуального хоста, как показано ниже:
<VirtualHost test.com:80>
ServerName test.com
ServerAlias local.test.com
DocumentRoot /var/www/html/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Значит test.com
и local.test.com
оба указателя в каталоге public_html
.
Теперь ваша цель: если домен test.com
, то внешнее приложение должно запускаться, а если домен local.test.com
, то ваше внутреннее (локальное) приложение должно запускаться.
В качестве структуры .htaccess
в cakephp я разместил файл .htaccess
в обеих папках app
и webroot
обоих приложений.
код .htaccess
в каталоге app/
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
код .htaccess
в webroot/
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
теперь изменения в .htaccess
корневого каталога, т.е. public_html
:
<IfModule mod_rewrite.c>
RewriteEngine on
#for test.com
RewriteCond %{HTTP_HOST} ^test\.com$
RewriteRule ^(.*)$ app/webroot/$1 [NC,L]
#for local.test.com
RewriteCond %{HTTP_HOST} ^local\.test\.com$
RewriteRule ^(.*)$ local/app/webroot/$1 [NC,L]
</IfModule>
- RewriteCond
%{HTTP_HOST} ^test\.com$
определит, что доменtest.com
- RewriteCond
%{HTTP_HOST} ^local\.test\.com$
определит, что доменlocal.test.com
Для общей перезаписи поддоменов вы можете использовать следующий код:
Структура папки:
public_html
-index.html
-subdomain
--index.html
Код .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
#for subdomain.test.com
RewriteCond %{HTTP_HOST} ^subdomain\.test\.com$
RewriteCond %{REQUEST_URI} !^/subdomain
RewriteRule ^(.*)$ subdomain/$1 [L]
</IfModule>
теперь test.com откроет index.html
папки public_html
, а subdomain.test.com
откроет index.html
папки subdomain
Обновить ответ 2
Я создал точную структуру каталогов, о которой идет речь, и ниже код htaccess работает для меня:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^test\.com$
RewriteRule ^(.*)$ app/webroot/$1 [NC,L]
RewriteCond %{HTTP_HOST} ^revamp\.test\.com$
RewriteCond %{REQUEST_URI} !^/revamp
RewriteRule ^(.*)$ revamp/$1 [NC,L]
</IfModule>