Назад | Перейти на главную страницу

Маскирование URL-адреса в mod_rewrite

Есть ли способ выполнить mod_rewrite из одного домена в другой, но сохраняя URL-адрес браузера одинаковым во всем? Вот чего я хочу:

Пользователь вводит что-то вроде bacon.com и заканчивается example.com/bacon, но URL-адрес браузера всегда остается bacon.com?

Я в основном хочу сделать mod_rewrite, маскируя URL-адрес. Извините за невообразимые примеры доменов, но все еще только 10 утра ... Я проверил множество других ответов, но они всегда обычно включают mod_rewrites на тем же домен. Они не учитывают тот факт, что bacon.com уже является ServerAlias ​​для example.com.

Я могу дать вам три способа сделать это.

1 Использование виртуальных хостов

Учитывая, что 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.

2 Использование mod_rewrite в качестве прокси

Если вы действительно хотите использовать 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, я бы предложил третий метод:

3 Использование mod_proxy напрямую

<VirtualHost *:80>
  ServerName bacon.com

  ProxyPass http://example.com/bacon
  ProxyPassReverse  http://example.com/bacon
</VirtualHost>

Для получения дополнительной информации об этом см. документация mod_proxy