Как работать с WordPress на localhost

4 мая 2015 г., 22:16:16
Просмотры: 17.9K
Голосов: 8

Я запускаю сайт на WordPress на своем ноутбуке, используя localhost, и мне часто нужно, чтобы коллеги могли его видеть. Если они вводят IP моего дома, они могли получить доступ к сайту, но все URL в WordPress, которые использовали site_url() или подобные функции, выводили "localhost", что, конечно, не работало для внешних пользователей.

Поэтому я изменил WordPress, чтобы он использовал мой IP в качестве URL сайта, что решило эту проблему, но создало другую. Если я ухожу с ноутбуком из дома и пытаюсь просмотреть свой сайт, все ссылки теперь отображаются как http://home-ip/, который недоступен. Более того, я не могу войти в wp-admin, чтобы изменить URL сайта обратно на localhost, так как меня перенаправляет на http://home-ip/site/wp-admin/.

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

0
Все ответы на вопрос 3
2
10

Вы можете использовать файл wp-config.php для изменения URL сайта в зависимости от того, откуда осуществляется доступ, используя переменную $_SERVER['REMOTE_ADDR']. У меня это выглядит примерно так:

if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1' || $_SERVER['REMOTE_ADDR'] == '::1') { 
    // доступ к сайту с локального сервера
    define('WP_SITEURL', 'http://localhost/mysite/');
    define('WP_HOME', 'http://localhost/mysite');
} else if (strpos($_SERVER['REMOTE_ADDR'],'192.168.0.') !== false) {
    // доступ к сайту с другой машины в домашней сети, 
    // все их (внутренние) сетевые адреса начинаются с этого числа;
    // следующая строка указывает внутренний сетевой адрес сервера 
    define('WP_SITEURL', 'http://192.168.0.192/mysite/');
    define('WP_HOME', 'http://192.168.0.192/mysite');
} else { // доступ к сайту извне домашней сети
    define('WP_SITEURL', 'http://89.*.*.*/mysite/'); // замените на ваш внешний IP-адрес
    define('WP_HOME', 'http://89.*.*.*/mysite');
}
//error_log("Siteurl is ".WP_SITEURL);

Этот метод также значительно упрощает загрузку сайта на продакшен-сервер или поддержание синхронизации между локальной и продакшен версиями сайта. (Хотя, очевидно, в wp-config.php на продакшен-сервере этот код быть не должен.)

Примечание: По какой-то причине я не могу использовать свой внешний домашний IP-адрес с других машин в моей домашней сети; если у вас не так, вы можете удалить часть с else if, оставив только блок else.

5 мая 2015 г. 00:06:58
Комментарии

Спасибо, это сработало для меня. Однако мне пришлось добавить || $_SERVER['REMOTE_ADDR'] == '::1'

user1778856 user1778856
5 мая 2015 г. 02:09:56

Интересно, я не знал об этом, но быстрый поиск говорит, что "::1 - это адрес обратной петли в IPv6. Можно считать его IPv6-версией 127.0.0.1". Я обновил ответ, чтобы включить это.

adelval adelval
5 мая 2015 г. 02:40:18
0

Хотя принятый ответ выглядит хорошим решением, простое изменение WP_SITEURL/WP_HOME не сработало в моем случае, потому что в текстовом содержимом страниц всегда оставалось множество абсолютных ссылок (например, изображения или ссылки, добавленные через WYSIWYG-редактор). Другими словами, мне практически пришлось использовать тот же домен, чтобы сайт работал корректно.

Поэтому, если это поможет кому-то еще, кто столкнулся с этой проблемой, мое решение оказалось вне WordPress — хотя оно может подойти не во всех случаях.

Я использую домен, например me.mycompany.com, а затем в своем файле HOSTS указываю его разрешение на 127.0.0.1 (то есть локальный хост). Для коллег, которым нужно просматривать сайт, я добавляю этот домен в их файл HOSTS с указанием моего локального IP-адреса.

Это решение также можно расширить, когда клиентам за пределами нашей сети нужно просматривать сайт: мы просто убеждаемся, что me.mycompany.com разрешается на наш публичный IP-адрес (обычно ваш веб-хостинг может помочь с этим, и это определенно упрощается, если у вас есть статический IP-адрес для интернет-подключения), а затем на нашем роутере перенаправляем веб-запросы на мой внутренний IP, фактически создавая простую систему веб-хостинга (только для разработки, конечно, а не для продакшена!).

Надеюсь, это поможет кому-то. Файл HOSTS можно редактировать на любой платформе, очевидно, инструкции различаются для Windows, Mac и Linux, поэтому лучше погуглить, если вам нужна помощь. В Windows файл находится по пути C:\Windows\System32\drivers\etc\hosts — откройте его в Блокноте и внесите необходимые изменения, следуя формату файла (вам потребуется запустить Блокнот от имени администратора, чтобы сохранить изменения).

5 мая 2015 г. 02:45:13
0

Начиная с WordPress 5.5.1 вы можете использовать функцию wp_get_environment_type. Установите wp_get_environment_type в файле wp-config.

21 мар. 2021 г. 14:45:18