Пара слов просто так: необычный подарок по радио для всех мужчин .
Для людей, работавших WordPress MU, не будет секретом тот факт, что адрес основного блога в WordPress всегда должен быть записан без "www" в начале. Существует хак, позволяющий обойти это неприятное ограничение многопользовательского WordPress и порадовать тех, кого эстетически привлекает три дабл-ю в начале адреса сайта.
Возможно, существует гораздо более простой способ сделать требуемое, но увы, на момент написания этой статьи я его не знаю, кто придумает - отпишитесь пожалуйста, буду премного благодарен.
Предположим, на сайте example.com мы хотим сделать основным адресом не собственно example.com, а www.example.com. При этом блоги третьего уровня не должны обрести адрес sub.www.example.com вместо привычного sub.example.com.
Все указания даются для WordPress MU версии 2.8.6, который я использовал на своём сайте. Тестовый сайт работает на WordPress MU 2.8.6 и BuddyPress 1.1.3 без ошибок.
Шаг 1. База данных.
Прежде всего, нам требуется настроить параметры в самой базе данных. Если попытаться сделать это прямо из сайта, возникнет проблема - циклическое перенаправление не даст нам возможность работать с самим сайтом.
- Таблица wp_blogs - заменяем значение поля domain у блога под номером 1 с example.com на www.example.com
- Таблица wp_1_options - заменяем option_value с http://example.com на http://www.example.com у строк с option_name параметром home и siteurl
- В таблице wp_site ни в коем случае ничего не трогаем!!
На сайт после этих изменений не заходим.
Шаг 2. Файл wpmu-settings.php
Мы должны разрешить WordPress MU воспринимать основной домен с префиксом www, не отправляя его на домен без префикса. Для этого проведём ряд замен.
Строка ~ 9
if( substr( $domain, 0, 4 ) == 'www.')
Заменяем на
if( substr( $domain, 0, 4 ) == 'www.' && $domain != 'www.'.DOMAIN_CURRENT_SITE)
Таким образом, www для основного домена обрезаться не будет.
Строка ~ 119
$current_blog = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain = %s ", $domain) );
Заменяем на
$current_blog = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain = %s OR domain = %s", $domain, 'www.'.$domain) );
Строка ~ 140
$current_blog = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $domain, $path) );
Заменяем на
$current_blog = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->blogs WHERE (domain = %s OR domain = %s) AND path = %s", $domain, 'www.'.$domain, $path) );
Теперь наш сайт не боится доменов с префиксом www. Или почти не боится.
Шаг 3. Перенаправление
В файле .htaccess реализуем простое перенаправление с example.com на www.example.com
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [L,R=301]
Шаг 4. Домен-ошибка
В файле wp-config.php рекомендую указать такую строку:
define( 'NOBLOGREDIRECT', 'http://www.example.com/' );
Шаг 5. Тестирование.
После вышеприведённых операций мой сайт на WordPress MU стал легко и просто работать с www-доменами. Надеюсь, Вы догадались перед всем этим концертом сделать бэкап? ;)
P.S.: оглядывая ещё раз все пункты, мне начинает казаться, что работает это только благодаря странной магии, ибо сами действия лишены смысла. Буду благодарен тому, кто найдёт более красивое решение проблемы.
P.P.S.: "И всё таки она вертится!" на сайте http://www.fld.av13.ru без проблем =)
Ещё пара слов просто так: Ремонт квартир фото кухня. .
Метки: WordPress, интернет, код, полезное, разработки, уроки
изврат… а если сделать редирект в htacces?…
Изврат, говорите? Да, разумеется изврат, но с WordPress MU иначе никак — это не простой вордпресс. WordPress MU, при использовании блогов на поддоменах, не поддерживает по умолчанию www в доменах (об этом ещё при установке написано).
Редирект в htaccess разумеется делается, но это лишь часть всего процесса (см. пункт 3).
Нужно прежде всего обучить систему воспринимать (!) основной домен с www, то есть прописывать все ссылки в системе не на http://examlple.com/smth.html, а именно на http://www.example.com/smth.html, иначе такое перенаправление никому просто не нужно.
Кроме того, если не сделать подобного изврата, то мы получим циклический редирект. WordPress перенаправляет все страницы «вручную» средствами php и отправкой location-заголовка. Если направленная к нему ссылка не соответствует имени домена (отсутствие или присутствие www считается несоответствием), то он автоматически перенаправляет её на «правильную». Если мы делаем просто редирект в htaccess-е, то в итоге система просто зависает на перенаправлении http://example.com → http://www.example.com → http://example.com → http://www.example.com → …
Если интересно, попробуйте самостоятельно, буду рад более простому решению для WordPress MU с блогами на поддоменах.
Спасибо, а я мучался…
Очень рад помочь) Кстати, как мне показалось, действие со строками 119 и 140 оказались необязательными — обновлял http://www.fld.mrsu.ru, работает и без этих строк идеально!)