Intereting Posts
Редактирование пользовательского запроса var с переменной Проблема с возвратом более чем однострочных титров Перенаправление на другую страницу, если пользователь не опубликовал не менее 1 продукта Навигация по одной почве внутри каждой категории Вкладка «Плагин администратора WordPress» Граватар всегда показывает изображение по умолчанию как получить идентификатор комментария в переднем конце при нажатии кнопки REPLY? при использовании add_user_to_blog получения ошибки «Вызов неопределенной функции get_userdata» Удалить границу в пользовательском мета-окне Вызов JQuery в плагине Как сделать обычную почтовую таксономию похожей на обычные категории? Не гиперссылки на заголовок меню Выход из системы перенаправления на главную страницу 301 перенаправление с веб-страницы на страницу wordpress в том же корне Выбор для уменьшенного изображения в сообщении на Facebook

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.

Solutions Collecting From Web of "Multisite: перенаправление на соответствующий домен, если субдомен не существует"

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

 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.