zorky

Рейтинг
135
Регистрация
12.12.2006
352ff7
Ростислав Шацкий #:
Добавил редактор .htaccess 🔥Выкладываю полный код со стилями и редактором:

Аккуратнее с .htaccess, не "наломайте дров" 😁

добавить хук автоочистки логов

// Добавляем хук для регистрации события cron
add_action('wp', 'schedule_weekly_log_cleanup');

// Регистрируем событие cron
function schedule_weekly_log_cleanup() {
    if (!wp_next_scheduled('weekly_log_cleanup')) {
         // Устанавливаем день недели и время выполнения события cron
        wp_schedule_event(strtotime('next Monday 23:55:00'), 'weekly', 'weekly_log_cleanup');
    }
}

// Добавляем хук для выполнения очистки логов при событии cron
add_action('weekly_log_cleanup', 'clear_visitor_log_weekly');

// Функция для очистки логов
function clear_visitor_log_weekly() {
    $log_file = ABSPATH . 'visitor_log.txt';
    
    // Открываем файл в режиме записи и обрезаем его до нулевой длины
    $file_handle = fopen($log_file, 'w');
    if ($file_handle) {
        fclose($file_handle);
    }
}

Я чуть подправил, чтоб в адмике смотреть можно было

// Отслеживание
// Создаем функцию для записи данных посетителей
function log_visitor_info() {
    $log_file = ABSPATH . 'visitor_log.txt'; // Путь к файлу лога

    $current_date_time = date('Y-m-d H:i:s'); // Текущая дата и время
    $visitor_ip = $_SERVER['REMOTE_ADDR']; // IP-адрес посетителя
    $current_page = $_SERVER['REQUEST_URI']; // Текущая посещенная страница

    // Запись в лог
    $log_entry = "$current_date_time - IP: $visitor_ip, Page: $current_page\n";

    // Открываем файл в режиме добавления
    $file_handle = fopen($log_file, 'a');
    
    if ($file_handle) {
        fwrite($file_handle, $log_entry);
        fclose($file_handle);
    }
}

// Добавляем хук, чтобы записывать данные при каждом запросе
add_action('wp', 'log_visitor_info');

// Создаем страницу в меню "Инструменты"
function custom_logs_page() {
    add_submenu_page(
        'tools.php',
        'Лог посещений',
        'Лог посещений',
        'manage_options',
        'visitor-log',
        'render_visitor_log_page'
    );
}
add_action('admin_menu', 'custom_logs_page');

// Функция для вывода таблицы лога на странице
function render_visitor_log_page() {
    // Получаем данные из файла лога
    $log_file = ABSPATH . 'visitor_log.txt';
    $log_content = file_get_contents($log_file);
    
    // Разбиваем записи по строкам
    $log_entries = explode("\n", $log_content);

    // Выводим страницу админки
    echo '<div class="wrap">';
    echo '<h2>Лог посещений</h2>';
    
    // Загружаем стили WordPress для таблиц
    wp_enqueue_style('wp-admin');
    
    // Выводим таблицу с данными
    echo '<table class="widefat">';
    echo '<thead><tr><th>Дата и время</th><th>IP-адрес</th><th>Посещенная страница</th></tr></thead>';
    echo '<tbody>';
    foreach ($log_entries as $entry) {
        if (!empty($entry)) {
            preg_match('/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) - IP: ([\d.]+), Page: (.+)/', $entry, $matches);
            if (count($matches) === 4) {
                list(, $date_time, $ip, $page) = $matches;
                echo "<tr><td>$date_time</td><td>$ip</td><td>$page</td></tr>";
            }
        }
    }
    echo '</tbody>';
    echo '</table>';

    // Добавляем кнопку очистки лога
    echo '<form method="post">';
    echo '<p><input type="submit" name="clear_log" class="button button-primary" value="Очистить лог"></p>';
    echo '</form>';

    if (isset($_POST['clear_log'])) {
        clear_visitor_log();
        echo '<div class="updated"><p>Лог посещений очищен.</p></div>';
    }
    
    echo '</div>'; // Закрываем div.wrap
}


// Функция для очистки лога
function clear_visitor_log() {
    $log_file = ABSPATH . 'visitor_log.txt';
    
    // Открываем файл в режиме записи и обрезаем его до нулевой длины
    $file_handle = fopen($log_file, 'w');
    if ($file_handle) {
        fclose($file_handle);
    }
}
jkm:
Перед проверкой не забывать сбрасывать кэш браузера или использовать какой-нибудь онлайн сервис например, bertal.ru.
Возможно сам wordpress делает редирект на адрес без / и .htaccess тут не поможет.

Вы правы.

Решилось только правкой functions

Может надо кому:

function pcl_smart_trailingslashit($string) {

/* ensure, that there is one trailing slash */
$string = rtrim($string, '/') . '/';
/* if there is a filename extension like .html or .php, then remove the trailing slash */
if ( 0 < preg_match("#\.[^/]+/$#", $string) ) {
$string = rtrim($string, '/');
}
return $string;
}
add_filter('user_trailingslashit', 'pcl_smart_trailingslashit');
jkm:

RewriteRule ^([^.]*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L]

Вот как раз так не работает, много редиректов пишет

Отдельно RewriteRule ^([^.]*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L] не работает у меня, сайт не грузится

Или я неверно записал?

Сейчас вот так - так не работает

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteRule ^(.+\.html)/$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^([^.]*[^/])$ https://%{HTTP_HOST}/$1/ [R=301,L] - с этим не работает, много редиректов

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

jkm:
Заменить (.+)/$ на ^(.+\.html)/$

Спасибо!! А как еще слеши после дирекеторий добавить?

Чтоб было так https://сайт.ru/product-category/premium/

Ребят, есть такая проблема

https://сайт.ru/product-category/premium///////

Добавил

RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$

RewriteRule . %1/%2 [L,R=301]

RewriteCond %{THE_REQUEST} //

RewriteRule .* /$0 [R=301,L]

Вроде ОК, но

Никак не удаляется / со сраниц .html

Вышлядит как https://сайт.ru/kupit-zhenskuyu-sumku.html/ - не айс.

Короче, мне надо, чтоб все урлы с лиректориями заканчивались на /

Ну а с .html - без / на конеце, само собой

Как это правильно прописать в .htaccess

Сайт wordpress

Хостинг beget

p.s. beget мне порекомендовал

RewriteRule (.+)/$ https://%{HTTP_HOST}/$1 [R=301,L]

Все ок, кроче того, что не могу после этого попасть в админку

http://сайт.ru/wp-admin/

ERR_TOO_MANY_REDIRECTS

А откуда такой внезапный рост?

datot:
Падение не заканчивается в один день. Пока не будут предприняты меры к сайту, падение и трафа и позиций будут продолжаться

Только чего такого сделать особенного, чтоб не навредить.

А у меня все вниз.. капец

Странно, а товарищ платит (и выставляются счета) по этим реквизитам

Получатель: ООО "Яндекс"

ИНН / КПП: 7736207543 / 997750001

Расчетный счет: 40702810600014307627

Банк: АО Юникредит Банк, 119034, г. Москва, Пречистенская наб., д. 9

Корсчёт: 30101810300000000545

БИК: 044525545

____

О и правда, поменяли реквизиты в счете!

Всего: 180