Intereting Posts
ound this in Где редактировать поля пользовательского контента по выбору, если нет подключаемого модуля? Добавление блоков javascript в один файл и добавление его в заголовок Значение поля формы гравитации в mycred log Разница между wp_list_categories и get_categories Сохранение / извлечение наилучших методов данных формы для разработки тем Как использовать «смещение» для paginate get_users? Просто созданная таблица WordPress не может получить $ wpdb get row для работы – нужна помощь Действия, используемые при очистке кеша (при добавлении / удалении сообщений) Как определить из другой папки (вне wordpress), если посетитель зарегистрировался в WordPress Как добавить add_filter () в состояние, основанное на $ post data Как получить URL пользовательской категории из настраиваемого типа сообщений? Как я могу предотвратить перенаправление моей пользовательской формы на wp-login? Обновление с 3.5.2 до 3.9.1 Как добавить связанные продукты на боковой панели? the_title () не отображается над значком

Multisite: перенаправление на соответствующий домен, если субдомен не существует

У меня многоуровневая с доменами:

site1.com, site2.com, site3.com и т. д., где site.com является «домашней областью» мультисайта. На данный момент есть две проблемы, которые я пытаюсь решить одновременно.

Если я попробую example.site2.com (субдомен, который не существует), он будет перенаправлен на site1.com/wp-signup.php (и у меня отключена регистрация). Я попытался исправить это с помощью https://wordpress.stackexchange.com/a/85530/35677 , при этом я был:

function prevent_multisite_signup() { wp_redirect(site_url(), 301); exit; } add_action('signup_header', 'prevent_multisite_signup'); 

Конечно, это частично делает то, что я хочу, чтобы перенаправить на главную страницу с 301, но это site1.com, а не site2.com. Есть ли способ настроить этот код, чтобы он всегда направлялся в его родительский домен? Я даже попытался сначала получить blog_id, а затем получить этот url и передать его, но к тому моменту, когда эта функция называется идентификатором блога, для site1.com.

Идеальный ответ был бы в коде по сравнению с чем-то вроде .htaccess.

Если вы хотите, чтобы все незарегистрированные субдомены перенаправлялись на главный доменный сайт:

 function prevent_multisite_signup() { $domain = $_SERVER['HTTP_HOST']; $domain = explode('.', $domain); $domain = array_reverse($domain); $domain = "$domain[1].$domain[0]"; wp_redirect($domain, 301); exit; } add_action('signup_header', 'prevent_multisite_signup'); 

Я смог решить это без .htaccess.

В моем wp-config.php я получил сайты в массиве. Вы можете получить это из своей базы данных, если вам нужно. Затем я предварительно сопоставлял URL-адрес, который был введен и проверен на известных сайтах. В моем случае все URL-адреса заканчиваются на .com (я всегда могу изменить preg, если это необходимо в будущем для .net или w / e). Я также дезинфицирую URL-адрес на всякий случай для обеспечения безопасности. Затем я в основном говорю wordpress, когда он переходит на перенаправление, чтобы использовать базовый домен (т.е. домашнюю страницу доступного домена). WordPress по умолчанию – перейти на основной сайт в вашей многопользовательской установке.

Вот мой фрагмент:

 preg_match('#^.*\.([A-Za-z]*.com)#', filter_var($_SERVER["HTTP_HOST"], FILTER_SANITIZE_URL), $match); $attempted_domain = $match[1]; $domain = 'http://site1.com'; //wordpress handles the parent domain of multisite special; so DO NOT set NOBLOGREDIRECT for site1.com. For example site1.com/doesnotexist will not show a 404 page but the homepage instead which is incorrect so have to add this first if conditional if($attempted_domain == $domain){ //otherwise check against our domain list and then redirect to that domain (site2.com/thisdoesnot exist will work correctly) foreach($all_domains AS $known_domain){ if($attempted_domain == $known_domain){ $domain = 'http://'.$known_domain; break; } } define('NOBLOGREDIRECT', $domain); } 

1.) То, что здесь понятно, заключается в том, что DNS разрешает ваш домен. Так что на ваш сайт придет что-то вроде blah.awesome.crazy.foo.bar.site1.com. В этом случае я уверен, что независимо от того, сколько уровней субдоменов существует, я проверяю базовый домен site1.com в моем списке сайтов.

2.) NOBLOGREDIRECT будет использоваться, только если вы попытаетесь перейти на несуществующий сайт. Например, отсутствующие страницы / сообщения будут по-прежнему 404, как обычно. См. № 4 для исключения

3.) Если по какой-либо причине домен не найден, используйте значение по умолчанию, которое, как мы знаем, существует. Это может произойти, если, например, мы изменили наш DNS, но пока не создали сайт.

4.) Существует специальный случай вокруг внутренней функции wordpress и NOBLOGREDIRECT при доступе к родительскому домену установки. Вы заметите, что я никогда не устанавливаю NOBLOGREDIRECT, когда родительский домен является доступным доменом. В противном случае для родителя не отображаются 404, вы перенаправляетесь на домашнюю страницу, которая является неправильной. Другие домены в установке не затрагиваются, поэтому мы можем использовать NOBLOGREDIRECT.