Intereting Posts
У меня есть 3 категории, я хочу отображать на цикле последние 3 категории Вставьте две строки в базу данных wordpress Каков наилучший способ вернуться к доменной имени www? Как лучше всего обрабатывать пользовательские действия с плагинами? Перезаписать textdomain плагинов по умолчанию – Lost Translation Как добавить определенную пользователем гиперссылку к «Лучшему изображению» и the_post_thumbnail () Моя страница не будет публиковать Как отключить или скрыть «меню свернуть» Как предотвратить дублирование пули для wp_insert_post? Почему он не показывает медиа-ссылки на отдых Api? (WordPress) Элемент меню и его последние 10 сообщений в качестве подменю Gravity Forms отправит только электронную почту от администратора Javascript, который будет выполняться только на дочерних страницах определенного родителя Сортировка пользователей по полю, а не по ID Как изменить вывод get_the_tag_list ()?

wp-config динамическое имя хоста в WP_HOME и WP_SITEURL

Существуют ли какие-либо недостатки в использовании следующего кода для настройки WP_HOME и WP_SITEURL в wp.config для установки как одиночных, так и многопользовательских установок:

/** * Site Host URLs */ $hostname = $_SERVER['HTTP_HOST']; if(isset($_SERVER['HTTP_X_FORWARDED_HOST']) && !empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $hostname = $_SERVER['HTTP_X_FORWARDED_HOST']; } $protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ? 'https://' : 'http://'; $siteUrl = $protocol . rtrim($hostname, '/'); define('WP_HOME', $siteUrl); define('WP_SITEURL', $siteUrl); 

Я знаю, что у меня нет большой репутации, чтобы предлагать в качестве щедрости, но ваш ответ получит мою 100-процентную оценку.

Очевидная проблема заключается в том, что вы доверяете пользовательским вводам (http-заголовкам), что делает ваш код подозрительным с точки зрения безопасности POV.

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

Насколько я могу видеть (2 года wordpress / woocommerce), я всегда использовал WP_HOME и WP_SITEURL. Это позволяет легко перемещать сайт из одного домена в другой, никогда не возникало проблем с ним даже при перемещении магазинов электронной торговли. Возможно, вы захотите перейти на панель администратора и сохранить там постоянные ссылки, чтобы они были обновлены в БД, но обычно это не обязательно.

NB! Он не будет обновлять какие-либо ссылки (a, img src и т. Д.), Которые были сохранены в базе данных. Например, если у вас есть блог на домене domainA.com, где вы вставили изображения через редактор WYSIWYG, и теперь вы переходите на domainB.com, тогда все изображения в вашем блоге будут по-прежнему пытаться загрузить с сайта domainA.com. Это связано с тем, что WYSIWYG сохраняет полные ссылки, даже если они принадлежат вашему домену в базу данных. Если у вас есть такой контент, вам придется выполнять поиск и замену этой базы данных.

В настоящее время мне больше не приходит вопросов, но если я что-то вспомню, я обновлю это сообщение.

редактировать

Как уже упоминалось ранее, существует риск безопасности при верификации

 $_SERVER['HTTP_X_FORWARDED_HOST'] 

потому что пользователь может легко установить этот заголовок сам.

Я использовал подобный подход во многих проектах CMS на протяжении многих лет. Он работает очень хорошо для быстрого развития, но у него есть проблемы.

Если вы можете верить, что веб-сервер (apache, nginx) настроен правильно, вы можете использовать $_SERVER['SERVER_NAME'] для получения имени хоста, настроенного веб-сервером. (Ссылка: https://stackoverflow.com/questions/2297403/http-host-vs-server-name )

Тем не менее, HTTP_HOST, безусловно, более гибкий!

Если у меня нет контроля над конфигурациями сервера, я обычно укажу набор «разрешенных» хостов, которые можно установить, и разумное значение по умолчанию. Например:

 /** * Site Host URLs */ $hostname = $_SERVER['HTTP_HOST']; if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $hostname = $_SERVER['HTTP_X_FORWARDED_HOST']; } $hostname = rtrim($hostname, '/'); $allowed = ['www.foo.com', 'dev.foo.com', 'staging.foo.com']; if (!in_array($hostname, $allowed)) { $hostname = 'www.foo.com'; } $protocol = (!empty($_SERVER['HTTPS']) || !empty($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; $siteUrl = $protocol . $hostname; define('WP_HOME', $siteUrl); define('WP_SITEURL', $siteUrl);