2015-09-18 2 views
2

У меня есть страница WordPress с этой структурой http://mywebsite.com/pageКак указать домен на страницу WordPress?

Я хочу, чтобы мой http://otherdomain.com, чтобы указать на http://mywebsite.com/page, но пользователь должен увидеть домен http://otherdomain.com в своем браузере? Запись A в моих DNS-точках http://otherdomain.com и http://mywebsite.com на тот же IP-адрес.

Как достичь этой цели? Я хотя про VirtualHosts, но поскольку папка/страница на самом деле не существует на сервере, но динамически создается WordPress через .htaccess

Как я могу указать свой домен на страницу WordPress?

После Рул ответа я редактировал свой файл htaccess.conf при установке WordPress Bitnami добавить это:

RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^otherdomain\.com.br$ 
    RewriteRule (.*) http://www.otherdomain.com.br/$1 [R=301,L] 
    RewriteRule ^$ http://mywebsite.com.br/page/ [L,R=301] 

код вызывается, потому что он добавляет www к главному URL, но это не работает , потому что он отображает содержимое от mywebsite.com.br, а не от mywebsite.com.br/page.

Я попробовал другой код, который

RewriteEngine on 
    RewriteCond %{HTTP_HOST} otherdomain\.com.br [NC] 
    RewriteCond %{REQUEST_URI} ^/$ 
    RewriteRule ^(.*)$ http://mywebsite.com.br/page/$1 [L] 

В этом случае отображается содержимое из http://mywebsite.com.br/page однако он изменяет свой URL http://mywebsite.com.br/page, а что не то, что я ищу, так как я хочу, чтобы сохранить браузер пользователя на http://otherdomain.com.br

+0

Do 'mywebsite.com' и' otherdomain.com' имеет один и тот же корень документа? –

+0

Я указал «otherdomain.com» на тот же псевдоним CNAME, что «mywebsite.com» указан – steps

+0

Вы имеете в виду, что если вы перейдете на «otherdomain.com» или «mywebsite.com», вы получите тот же контент на странице? –

ответ

1

Все SEO и дублировать вопросы содержания в сторону:

WordPress знает о домене это предполагается отвечать в базе данных. Сам сайт WordPress будет также перенаправлять на основе имени домена, установленного на панели инструментов WordPress (в разделе «Настройки» => «Общие»).

Это не будет хорошо работать с использованием htaccess. Фактически вам нужно, чтобы доменное имя http://otherdomain.com указывало на сервер, на котором живет mywebsite.com (не используя переадресацию, но изменяющую запись A в вашем DNS). Причина в том, что при переписывании имени домена сайт WordPress также будет искать файлы css и js в этом домене (ищет их по адресу otherdomain.com). Если домен указан на сервере WordPress, это будет работать правильно.

Чтобы WordPress разрешил «отвечать» на несколько доменов, вам необходимо изменить код в своей установке WordPress, чтобы он не переписывал URL-адрес в http://mywebsite.com. Для этого добавьте нижеприведенный PHP-код в файл function.php темы WordPress:

Что вам нужно сделать, это добавить фильтр (фильтры) к соответствующим крючкам, которые возвращают URL-адрес сайта, поэтому вы можете изменить его как вы посчитаете нужным:

// This will allow you to modify the site url that is stored in the db when it is requested by WP 
add_filter('option_siteurl', 'my_custom_filter_siteurl', 1); 

// This will allow you to modify the home page url that is stored in the db when it is requested by WP 
add_filter('option_home', 'my_custom_filter_home', 1); 

// Modify the site url that WP gets from the database if appropriate 
function my_custom_filter_siteurl($url_from_settings) { 
    // Call our function to find out if this is a legit domain or not 
    $current_domain = my_custom_is_domain_valid(); 
    // If so, use it 
    if ($current_domain) { 
     return "http://{$current_domain}"; 
     // Otherwise, use the default url from settings 
    } else { 
     return $url_from_settings; 
    } 
} 

// Modify the home page url that WP gets from the database if appropriate 
function my_custom_filter_home($home_from_settings) { 
    // Call our function to find out if this is a legit domain or not 
    $current_domain = my_custom_is_domain_valid(); 
    // If so, use it 
    if ($current_domain) { 
     $base_url = "http://{$current_domain}"; 
     // Modify/remove this as appropriate. Could be simply return $base_url; 
     return $base_url . "/home-page"; 
    // Otherwise, use the default url from settings 
    } else { 
     return $home_from_settings; 
    } 
} 

// Utility function to determine URL and whether valid or not 
function my_custom_is_domain_valid() { 
    // Create a whitelist of valid domains you want to answer to 
    $valid = array(
     'otherdomain.com', 
     'mywebsite.com.br', 
    ); 

    // Get the current domain name 
    $current_server = $_SERVER['SERVER_NAME']; 

    // If it's a whitelisted domain, return the domain 
    if (in_array($current_server, $valid)) { 
     return $current_server; 
    } 

    // Otherwise return false so we can use the default set in the DB 
    return FALSE; 
} 

Добавление следующие фильтры и функции будут вызывать нужную страницу, чтобы появиться в качестве домашней страницы, без /page в URL:

// This will allow you to modify if a page should be shown on the home page 
add_filter('option_show_on_front', 'my_custom_show_on_front'); 

// This will allow you to modify WHICH page should be shown on the home page 
add_filter('option_page_on_front', 'my_custom_page_on_front'); 

// Modify if a page should be shown on the home page 
function my_custom_show_on_front($default_value) { 
    // We only want to do this on specific domain 
    $is_other_domain = my_custom_is_other_domain(); 
    // Ensure it's the domain we want to show the specific page for 
    if ($is_other_domain) { 
     return 'page'; 
     // Otherwise, use the default setting 
    } else { 
     return $default_value; 
    } 
} 

// Modify WHICH should be shown on the home page 
function my_custom_page_on_front($default_value) { 
    // We only want to do this on specific domain 
    $is_other_domain = my_custom_is_other_domain(); 
    // Ensure it's the domain we want to show the specific page for 
    if ($is_other_domain) { 
     // If it's the proper domain, set a specific page to show 
     // Alter the number below to be the ID of the page you want to show 
     return 5; 
    } else { 
     // Otherwise, use the default setting 
     return $default_value; 
    } 
} 

// Utility function to easily determine if the current domain is the "other" domain 
function my_custom_is_other_domain() { 
    $current_domain = my_custom_is_domain_valid(); 

    return ($current_domain == 'otherdomain.com') ? $current_domain : FALSE; 
} 
+0

Это, похоже, работает для интеграции WordPress с несколькими доменами. Тем не менее, это не решило мою проблему, и я хочу, чтобы при переходе пользователя на 'otherdomain.com' он обслуживал контент с' mywebsite.com.br/page' без добавления '/ page' в URL-адрес – steps

+0

@ JoãoPauloApolinárioPassos - эта часть не будет разрешимой, если вы не установите 'mywebsite.com.br/page' вашей главной страницы в WordPress (в разделе« Настройки »=>« Чтение », верхняя настройка -« Front Page Displays » Измените его на «Статическая страница» и выберите страницу '/ page'. –

+0

Но это должно быть на главной странице, только если я доберусь с сайта' otherdomain.com'.Если я доберусь с сайта 'mywebsite.com.br', передняя страница должна быть другой. Это возможно? – steps

0

Вам нужно будет добавить правила перезаписи.

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^otherdomain\.com$ 
RewriteRule (.*) http://www.otherdomain.com/$1 [R=301,L] 
RewriteRule ^$ http://mywebsite.com/page [L,R=301] 
+0

Я попытался сделать это на странице .htaccess из папки установки WordPress, и это не сработало. Я отредактировал этот вопрос с моим кодом сейчас – steps

+0

Вы должны добавить это в wordpress install, но к virtualhost или .htaccess для virtualhost –

+0

Я нахожусь в Bitnami, и правильный путь был '/ opt/bitnami/apps/wordpress/conf/htaccess.conf'. Код теперь называется, но он не работает. Он добавляет 'www' в otherdomain.com, когда я печатаю, но не показываю содержимое с mywebsite.com/page, только mywebsite.com – steps

0

Вы не должны перенаправлять пользователя mywebsite.com с [L, R = 301], а, вы должны использовать флаг P, который позволяет задать mod_rewrite, чтобы действовать в качестве прокси-сервера для домена otherdomain.com. что-то вроде этого,

RewriteRule /(.*) http://mywebsite.com/page/$1 [P] 

убедитесь, чтобы изменить CSS файлы тоже к следующему,

RewriteRule /css/(.*) http://mywebsite.com/css/$1 [P] 

, который позволит все ваши otherwebsite.com CSS, чтобы стать mywebsite.com CSS и показывать как otherwebsite. com/css, а не mywebsite.com/page/css

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

+0

Проблема в том, что' mywebsite.com/page' не является реальной папкой в сервер. Это не похоже на то, что мне понравилось/var/www/page. Это текстовая страница с хорошим URL-адресом WordPress, поэтому я считаю, что часть CSS не имеет смысла. – steps

0

Попробуйте это регулярное выражение. Возможно, это не сработает, но это даст вам некоторое представление о том, где найти решение.

В основном вам нужно использовать an external redirect от otherdomain к mywebsite, а затем an internal redirect от mywebsite к otherdomain. Но это может вызвать цикл, поэтому вам нужно использовать какое-то условие, чтобы избежать его.

RewriteEngine on 

RewriteCond %{ENV:REDIRECT_FINISH} !^$ 
RewriteRule^- [L] 

RewriteCond %{HTTP_HOST} ^otherdomain\.com.br$ [NC] 
RewriteRule ^(.*)$ http://mywebsite.com.br/page/$1 [R,L] 

RewriteRule ^.*$ http://otherdomain.com.br [E=FINISH:1] 
Смежные вопросы