WordPress .htaccess: сайт в поддомене должен разрешить домен TLD / root - PullRequest
0 голосов
/ 14 января 2020

У меня есть сайт, который в настоящее время находится на example.com/uk/ - это URL, и он физически живет в этом месте (есть также другая установка WP в root на example.com/). Теперь мне нужно example.co.uk для разрешения на сайт, который живет в example.com/uk/. Новый URL должен быть готов и работать для посетителей как можно скорее, но есть десятки сервисов, интегрированных со «старым» URL, которые нельзя переключить сразу, поэтому необходимо, чтобы оба URL были активны одновременно.

Мне удалось заставить все это работать с CNAME в DNS и редактировать в wp-config.php, чтобы принять и входящие .com/uk & .co.uk, и это работает для домашней страницы; однако, если я go немного глубже на .co.uk, я получаю ошибку сервера.

Я сузил это до файла .htaccess, но я не могу заставить его работать как ожидалось для обоих домены. Оригинальный .htaccess выглядел так:

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

Моя последняя попытка выглядит так:

RewriteEngine On
RewriteBase /

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

RewriteCond %{HTTP_HOST} example
RewriteCond %{REQUEST_URI} !/uk/
RewriteRule . /index.php [L]

RewriteCond %{HTTP_HOST} example
RewriteCond %{REQUEST_URI} /uk/
RewriteRule . /uk/index.php [L]

... но ни один из скриптов или CSS загрузка (я думаю, они заканчиваются бесконечным l oop). Я подозреваю, что частью проблемы является RewriteBase, но, похоже, она не отвечает на RewriteCond s.

TL; DR Мне нужен веб-сайт WP для работы как с URL-адресом root, так и URL подкаталога, но я не могу понять правила .htaccess, чтобы это произошло.

1 Ответ

1 голос
/ 14 января 2020

При использовании Apache 2.4+ это можно сделать с условием <If/Else> в .htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On

    <If "%{HTTP_HOST} == 'example.co.uk'">
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </If>

    <ElseIf "%{HTTP_HOST} == 'example.com'">
        RewriteBase /uk/
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /uk/index.php [L]
    </ElseIf>
</IfModule>

Обратите внимание, что ваш файл wp-config.php также должен иметь возможность принимать & разрешить сайт для входящего домена:

$allowableDomains = array(
    'example.co.uk',
    'example.com/uk',
);

define('DOMAIN_ARRAY', $allowableDomains);

function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}

#   The protocol should be whatever your site is using:

$protocol = 'https://';
$refHost = $_SERVER['HTTP_HOST'];

if (in_arrayi($refHost, $allowableDomains)) {
    $siteURL = $protocol . $refHost;
} else {
    $siteURL = $protocol . $allowableDomains[0];
}

define('WP_SITEURL', $siteURL);
define('WP_HOME', $siteURL);

Это разрешит любой входящий домен, но по умолчанию будет .co.uk, если вы указываете любые другие домены, не входящие в массив $allowableDomains.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...