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

Возможно ли переписать HOST без перенаправления на переписанное имя хоста?

У меня есть только один виртуальный хост, доступный у моего поставщика услуг, структура папок аналогична этой:

У меня зарегистрирован и работает домен primarydomain.ext. У меня есть второй домен "secondary.ext", зарегистрированный где-то еще и указывающий на тот же веб-сервер. Провайдер услуг разрешил это, и теперь он действует как псевдоним для primarydomain.ext. Я хочу использовать mod_rewrite для внутренней перезаписи "secondary.ext" на "secondary.primarydomain.ext" и обработки его таким образом (с папкой с именем secondary в качестве корня).

URL-адрес в браузере должен оставаться "secondary.ext"! Решение, которое у меня есть, работает, оно хранит следующее в файле .htaccess, расположенном внутри папки «primarydomain.ext», но обновляет URL-адрес браузера на «secondary.primarydomain.ext»:

RewriteEngine On 

RewriteCond %{HTTP_HOST} secondary.ext$ [NC]
RewriteRule ^(.*)$ http://secondary.primarydomain.ext [L]

Как я могу это исправить, чтобы URL-адрес браузера не обновлялся или какое-либо другое решение дало мне желаемый эффект?

(в качестве примечания: мой провайдер не может (не хочет) создавать новый виртуальный хост для доменов, которые им не зарегистрированы, поэтому они указали мне на это решение, но не предлагают его поддержки.)

Ответ заключается в том, чтобы не пытаться изменить HOST, а изменить путь, используемый для локального поиска файлов.

RewriteCond %{HTTP_HOST} secondary.ext$ [NC]
RewriteRule ^(.*)$ /domains/primarydomain.ext/secondary$1 [L]

редактировать Если вы получаете бесконечный цикл, добавить еще одно условие для исключения запросов, уже находящихся во вторичной папке после условия HTTP_HOST и перед Правилом:

RewriteCond %{REQUEST_URI} !^/secondary/.*

Смена хоста всегда приводит к тому, что Apache создает внешнее перенаправление.

Абсолютный URL
Если указан абсолютный URL-адрес, mod_rewrite проверяет, соответствует ли имя хоста текущему хосту. Если это так, схема и имя хоста удаляются, а полученный путь рассматривается как URL-путь. В противном случае для данного URL выполняется внешнее перенаправление. Чтобы принудительно выполнить внешнее перенаправление обратно на текущий хост, см. Флаг [R] ниже.

Видеть http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule