2013-05-10 7 views
3

Я пытаюсь перенаправить старый домен в новый поддомен, пытаясь сохранить старый домен видимым в адресной строке браузера.Как перенаправить старое доменное имя на новое доменное имя, сохранив прежнее доменное имя в адресной строке браузера?

Я использовал htaccess для этого, и все работает, за исключением сохранения старого домена, видимого в адресной строке.

Другая важная вещь заключается в том, что необходимо сохранить папки в переменных URL и GET.

Я пытаюсь сделать все это элегантно через htaccess, потому что я не хочу использовать i-frame для этого.

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

Мой вопрос: как мне отображать старое доменное имя в адресной строке браузера после перенаправления? Я где-то читал, что это можно сделать с помощью так называемого «проксирования контента», но я могу ошибаться. Я также не знаю, как это работает.

<IfModule mod_rewrite.c> 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^domain.com [nc] 
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L] 

RewriteCond %{HTTP_HOST} ^www.domain.com [nc] 
RewriteRule ^(.*)$ http://subdomain.domain.com/$1 [r=301,nc,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

Update:

Хорошо, так что я получил еще один шаг вперед. Следующий код работает, когда я помещаю файлы сайта в подкаталог корня.

Однако все еще есть проблема с этим. Хотя он перенаправляет example.com в example.com/subdirectory, он не перенаправляет example.com/index.php в example.com/subdirectory/index.php.

Я все еще пытаюсь выяснить, как это сделать, чтобы он работал со всеми файлами, включая index.php.

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar. 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{HTTP_HOST} ^www.example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

Еще одно примечание. Поскольку все элементы моего веб-сайта используют относительные пути, я должен был установить корень HTML в подкаталог также для того, чтобы все работало, потому что из-за переписывания относительные пути в HTML-сайте сайта рассматривали неправильный корневой каталог для файлов , А именно они связывались с фактическим корневым каталогом, а не с подкаталогом. Я установил HTML корень/основание в поддиректории следующим образом:

<head> 
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" /> 
</head> 

Update:

Хорошо, так что я получил еще один шаг вперед. Следующий код работает, когда я помещаю файлы сайта в подкаталог корня.

Однако все еще есть проблема с этим. Хотя он перенаправляет example.com в example.com/subdirectory, он не перенаправляет example.com/index.php в example.com/subdirectory/index.php.

Я все еще пытаюсь выяснить, как это сделать, чтобы он работал со всеми файлами, включая index.php.

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the browser address bar. 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{HTTP_HOST} ^www.example.com [nc] 
RewriteRule ^$ /subdirectory/ [nc,L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

Еще одно примечание. Поскольку все элементы моего веб-сайта используют относительные пути, я должен был установить корень HTML в подкаталог также для того, чтобы все работало, потому что из-за переписывания относительные пути в HTML-сайте сайта рассматривали неправильный корневой каталог для файлов , А именно они связывались с фактическим корневым каталогом, а не с подкаталогом.Я установил HTML корень/основание в поддиректории следующим образом:

<head> 
<base href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/subdirectory/" /> 
</head> 
+0

Является ли содержание точно таким же в субдомене, что и в старом домене? –

+0

- это домен и субдомен на том же сервере? – miah

+0

@misplacedme: Нет, контент в подобласте отличается. –

ответ

0

Если домены в правила перезаписи не совпадают, то апач будет переписать в адресной строке.

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com 
RewriteRule ^(.*)$ subdomain_directory/$1 [QSA L] 

Если это не в том же каталоге, вы можете создать символьную ссылку в каталоге доменов, ссылки на директорию подобластей, которые должны работать. Вам нужно будет разрешить FollowSymlinks или SymLinksIfOwnerMatch, если они еще не установлены.

+0

Вы правы, домены в правиле переписывания не совпадают. Можете ли вы или кто-либо еще опубликовать пример кода с использованием FollowSymlinks и/или SymLinksIfOwnerMatch, который работает? Я искал его в Интернете, но еще не нашел пример кода, который точно выполняет то, что я ищу. –

+0

Если у вас есть доступ к ssh, вы должны запустить 'ln -s {/ path/to/subdomain-directory} {link-name}', где имя ссылки будет файлом, который вы ссылаетесь в rewriterule. Если у вас нет доступа к оболочке, вам нужно спросить свою хостинговую компанию, могут ли они настроить ее для вас. – miah

+0

Я не уверен, что понимаю, что вы говорите. Мое намерение состояло в том, чтобы выполнить это, добавив скрипт в файл htaccess в корневой каталог domain.com. –

0

Update 2:

Этот код, кажется, работает для меня:

#Redirect a domain to a subdirectory, while displaying only the domain and not the subdirectory in the address bar of a browser 
<IfModule mod_rewrite.c> 

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com 
RewriteCond %{REQUEST_URI} !/subdirectory/ 
RewriteRule ^(.*)$ /subdirectory/$1 [L] 

</IfModule> 

Это часть HTAccess кода делает перерыв HTML пути в коде веб-сайта, но это может быть противопоставлена ​​переопределение HTML базовый путь, добавив HTML базовый тег в заголовке веб-сайта, как например:

<head> 
<base href="http://www.mydomain.com/subdirectory/" /> 
</head> 

Кроме того, вы должны будете принять дополнительные меры с путями/ссылки в ваш Страница e Javascript, чтобы заставить их работать.

Что касается путей в PHP, вам необходимо использовать относительные пути, чтобы поддерживать PHP-код сайта после перенаправления.

Мне потребовалось два дня, чтобы понять, что все это происходит всего за 4 часа сна, потому что много кода htaccess, доступного в Интернете, просто не работает. Надеюсь, это сэкономит другим людям много работы, стресса и разочарования.

Удачи. :)

Смежные вопросы