Переписать часть URL с определенной строкой запроса в другой домен - PullRequest
0 голосов
/ 06 февраля 2012

Я хочу переписать набор URL-адресов в другой домен, только когда задана конкретная строка запроса.Необходимо переписать только основной URL-адрес домена, оставшийся путь URL-адреса должен остаться прежним, а также удалить строку запроса.

Примеры:

http://www.domain-a.com/post-type-a/post-title/?template=custom

следует перенаправитьна:

http://www.domain-b.com/post-type-a/post-title/

и

http://www.domain-a.com/post-type-b/post-title/?template=custom

следует перенаправить на:

http://www.domain-b.com/post-type-b/post-title/

и

http://www.domain-a.com/post-type-c/post-title/?template=custom

следует перенаправить на:

http://www.domain-b.com/post-type-c/post-title/

и т. Д.

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

ОБНОВЛЕНИЕ

Если я помещу эти строки в мой .htaccess в корне домена -b:

RewriteCond %{HTTP_HOST} domain-a\.com$ [NC]
Rewritecond %{QUERY_STRING} ^template=custom$ [NC]
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]

перенаправление действительно работает, однако я сталкиваюсь с 2 проблемами:

1) Правильный шаблон не загружен, так как правило перезаписи уже удалило строку запроса ранеефункция может его обнаружить.
2) http://www.domain -b.com переходит обратно на www.domain-a.com из-за других правил перезаписи.

Так что я думаюЯ должен найти решение для проблемы 1 в моей функции wordpress вместо .htaccess.Позвольте мне объяснить мою ситуацию лучше:

Мой основной домен с веб-пространством зарегистрирован на domain-b .Мой сайт WordPress установлен в папке blog .Я использую domain-a в качестве URL-адреса WordPress, поэтому domain-b.com / blog / перенаправляет на domain-a .Это работает нормально, но я хочу сделать исключение из этих правил переписывания WordPress, если строка запроса установлена ​​на template = custom , как указано выше.В моем файле .htaccess в корне папки blog у меня есть следующие правила (сгенерированные WordPress):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

Это функция, которую я использую для загрузки различныхфайлы шаблонов сообщений:

// Add Query var
add_filter('query_vars', 'template_query_vars');
function template_query_vars( $query_vars ){
    $query_vars[] = 'template';
    return $query_vars;
}

// Switch template according to query parameter
add_filter( 'template_redirect', 'sjc_template' );
function sjc_template(){
    global $wp_query;
    if( $wp_query->get( 'template' ) ):
        global $post;
        $posttype = get_post_type($post->ID);
        include( get_template_directory() . '/single-'. $posttype .'-custom.php' );
        exit();
    endif;
}

Поэтому я попытался добавить туда правило перезаписи, но оно не работает (пока):

// Set up the rewrite
add_action( 'init', 'template_setup_rewrites' );
function template_setup_rewrites() {
    add_rewrite_rule('^/custom/?', '^/?template=custom', 'top');
    flush_rewrite_rules(false);
}

Для проблемы 2 мне как-то нужно сделать исключениео правилах переписывания, сгенерированных Wordpress, чтобы сохранить domain-a ...

Извините, если все это немного расплывчато, но это сложно объяснить.ЛЮБАЯ помощь приветствуется!

Спасибо

1 Ответ

1 голос
/ 06 февраля 2012

Добавьте следующее в файл .htaccess в корневом каталоге вашего сайта.

RewriteEngine on
RewriteBase / 

#if on www.domain-a.com
RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC]
#and qs contains template=custom
RewriteCond %{QUERY_STRING} ^template=custom$ [NC]
#redirect any request to domain-b
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]

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

Редактировать в ответ на комментарии

Options +FollowSymlinks 
RewriteEngine On 

#if the blog is only supposed to operate on domain-a, restrict it with thie condition
RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/blog/.*$ 
RewriteRule ^(.*)$ /blog/$1 [L]

RewriteCond %{HTTP_HOST} ^www\.domain-a\.com$ [NC] 
RewriteCond %{QUERY_STRING} ^template=custom$ [NC] 
RewriteRule ^ http://www.domain-b.com%{REQUEST_URI}? [R=301,L]
...