У меня есть доменное имя (example2.com), которое будет служить для направления пользователя на определенную страницу другого веб-сайта на том же сервере (example.com/page2). Я следую инструкциям в этой статье для создание редиректа без изменения URLсм. пример 2, но, должно быть, что-то делает не так, потому что я получаю либо сообщение об ошибке, либо загрузку фиктивного содержимого в index.html. Когда я удаляю index.html, я получаю:
Не найден Запрошенный URL / не был найден на этом сервере, как и следовало ожидать без index.html.
Я установил новый виртуальный хост в Apache, создав example2.com.conf
в sites-available и создал символическую ссылку в sites-enabled. Я создал фиктивный index.html и определил docroot в example2.com.conf
файл. Пока все хорошо, фиктивный контент загружается.
Все содержимое моего .htaccess
в корневом каталоге example2.com:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example2.com
RewriteRule ^(.*) http://www.example.com/page2 [P]
Любые ссылки на странице, которые я хочу загрузить в домен, являются либо внешними, либо могут переходить на example.com как обычно. Это страница партнерского проекта без бренда, созданная с использованием Drupal. Необходимо загрузить доменное имя (example2.com) (example.com/page2), но в адресной строке отобразить example2.com. Это единственный контент для доменного имени, поэтому я создал для него docroot только для тестирования фиктивного контента и создания .htaccess.
Apache и Debian 9.
Я также попробовал некоторые предложения из этого сообщения, многие из которых говорят, что вы не можете сделать это с помощью файла .htaccess. Я также пробовал предложения в ответах ниже.
Примечание: этот вопрос был сильно переписан, поскольку я подошел ближе к объяснению того, что я пытаюсь сделать.
Если вы хотите сохранить URL-адрес при отображении страницы из другого домена, вам понадобится обратный прокси.
mod_proxy - наиболее простое решение, описанное в Руководство по обратному прокси.
<VirtualHost *:80>
ServerName example.net
ProxyPass "/" "http://www.example.com/page2/"
ProxyPassReverse "/" "http://www.example.com/page2/"
</VirtualHost>
mod_rewrite RewriteRule
также есть флаг прокси, который можно использовать, чтобы избежать перенаправления:
доверенное лицо
P
: Принудительная отправка заменяемого URL-адреса внутри как прокси-запрос.
RewriteCond %{HTTP_HOST} ^example.net
RewriteRule ^(.*) http://example.com/page2 [P]
Если сайт находится на том же сервере, можно указать DocumentRoot
прямо тоже:
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/var/www"
</VirtualHost>
<VirtualHost *:80>
ServerName example.net
DocumentRoot "/var/www/page2"
</VirtualHost>
Ты можешь. Для этого есть несколько вариантов.
Один из способов - настроить настоящий виртуальный домен example2.com и настроить только параметр «Перенаправление», чтобы перенаправлять все, куда вы хотите. На самом деле это более простой и легкий подход (mod_rewrite - это гораздо больше «тяжелая артиллерия»).
Т.е.
<VirtualHost *:80>
ServerName example2.com
Redirect / http://example.com/page2
</VirtualHost>
DigitalOcean кажется рекомендовать этот подход.
Фактическое условие перенаправления, конечно, можно изменить.
Другой способ - узнать, как настроить mod_rewrite. При условии, что ваш mod_rewrite правильно загружен и ваша конфигурационная часть фактически получит запрос (т.е. правильно настроил VirtualHost или основной сервер), также нет никаких других директив mod_rewrite, которые могли бы вмешаться в эту, вы можете использовать что-то вроде этого:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example2\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/page2/$1 [L,R]
Чтобы загрузить туда только главную страницу, вы можете заменить условие соответствия. * В RewriteRule, то есть захватывать только индексную страницу («пустой запрос»):
RewriteRule ^$ http://example.com/page2 [L,R]
(или должно быть ^ / $? Не знаю, попробуйте оба).
https://stackoverflow.com/questions/13021893/htaccess-mod-rewrite-hostname
Обратите внимание на поведение двух вариантов. Первый скажет пользовательскому агенту загрузить другой URL-адрес, чтобы пользователь мог заметить, что они перешли на другой адрес. Второй будет представлять пользователю содержимое другого адреса, как если бы он был расположен в первом месте, т.е. пользователь увидит доменное имя example2.com, но страница будет поступать с example.com/page2. У них нет возможности узнать, доступна ли эта страница по другим адресам. Итак, страница содержит включенные медиафайлы (css, изображения, шрифты), вы также должны предоставить для них правила перезаписи или использовать для них только абсолютные URI.
Я лично рекомендую следить за разработчиками Apache и избегать mod_rewrite если это возможно (см. также этот ответ).
Видеть официальная документация из mod_rewrite также. Будьте осторожны, этот модуль является функцией, поэтому используйте его осознанно и с осторожностью.