Есть ли способ выполнить mod_rewrite из одного домена в другой, но сохраняя URL-адрес браузера одинаковым во всем? Вот чего я хочу:
Пользователь вводит что-то вроде bacon.com и заканчивается example.com/bacon, но URL-адрес браузера всегда остается bacon.com?
Я в основном хочу сделать mod_rewrite, маскируя URL-адрес. Извините за невообразимые примеры доменов, но все еще только 10 утра ... Я проверил множество других ответов, но они всегда обычно включают mod_rewrites на тем же домен. Они не учитывают тот факт, что bacon.com уже является ServerAlias для example.com.
Я могу дать вам три способа сделать это.
Учитывая, что bacon.com является ServerAlias для example.com, т.е. они оба находятся на одном сервере, вы можете сделать это вообще без использования mod_rewrite. Подумайте об этом так: mod_rewrite, по сути, является способом сопоставления URL-адресов с файловой системой. Я бы просто создал отдельный VirtualHost, который использует правильный каталог в качестве своей базы.
Вот краткий пример:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
DocumentRoot /www/files
[... all other config you have for example.com]
</VirtualHost>
<VirtualHost *:80>
ServerName bacon.com
DocumentRoot /www/files/bacon
# To have CSS directly under /www/files/css instead of /www/files/bacon/css
Alias /css /www/files/css
[... all other config you have for bacon.com]
</VirtualHost>
Как видите, это не переписывание; вместо этого вы настраиваете bacon.com на использование базового каталога example.com/bacon в качестве собственного DocumentRoot.
Если вы действительно хотите использовать mod_rewrite вместо этого, вы можете использовать флаг P, который заставит mod_rewrite действовать как прокси. Вот пример:
RewriteRule /(.*) http://example.com/bacon/$1 [P]
Поскольку вы хотите http://bacon.com/css быть http://example.com/css вместо того http://example.com/bacon/css, создайте отдельное правило, которое идет первым и перехватывает этот конкретный URL:
RewriteRule /css/(.*) http://example.com/css/$1 [P]
RewriteRule /(.*) http://example.com/bacon/$1 [P]
Для этого у вас должен быть загружен и включен mod_proxy. Однако обратите внимание, что это снизит производительность по сравнению с использованием mod_proxy напрямую, поскольку он не обрабатывает постоянные соединения или пул соединений. Поэтому, если вы не можете делать то, что хотите с VirtualHosts, я бы предложил третий метод:
<VirtualHost *:80>
ServerName bacon.com
ProxyPass http://example.com/bacon
ProxyPassReverse http://example.com/bacon
</VirtualHost>
Для получения дополнительной информации об этом см. документация mod_proxy