Перенаправить на страницу входа, если пользователь не вошел, но не перенаправил Googlebot - PullRequest
0 голосов
/ 08 января 2019

Как я могу это сделать? Вы не можете получить доступ к сайту без члена, но бот Google может войти. Как я могу это сделать? Вы не можете получить доступ к сайту без регистрации, но бот Google может войти. Я пытался создать переменную и исключить номер IP, но мне не удалось.

1 Ответ

0 голосов
/ 10 января 2019

Было бы лучше проверить по с помощью обратного поиска DNS , поскольку User Agent может быть подделан . PHP делает это довольно легко, вот пример теста:

// $ip = $_SERVER['REMOTE_ADDR']; // Use to check the visitor IP
$ip = '66.249.66.1'; // Sample Google IP from their docs
$host_name = gethostbyaddr($ip);
$is_google = strpos($host_name, 'google') !== false ? 'is' : 'is <b>NOT</b>';

echo "<p>$host_name</p>";

echo  "<p>IP Address $is_google Google</p>";

Теперь мы можем проверить, вошел ли пользователь в систему и не являются ли они ботом Google. Рекомендуется использовать WordPress template_redirect hook . Добавьте это в ваш functions.php файл темы:

/**
 * Redirect the user to login if they are not logged in and not a google bot
 */
function redirect_not_logged_in_not_google() {
    $host_name = gethostbyaddr($_SERVER['REMOTE_ADDR']);
    if( strpos($host_name, 'google') === false && !is_user_logged_in() ) {
        wp_redirect( home_url( '/login/' ) );
        die;
    }
}
add_action( 'template_redirect', 'redirect_not_logged_in_not_google' );
...