Как в PHP задать редирект на другой URL до загрузки страницы? Дневной крем ucp php redirect

Быстрая навигация по этой странице:

Если вы решили написать скрипт и сделать редирект PHP, преимущества этого шага очевидны: PHP – серверно ориентированный язык скриптов; перенаправление будет выполняться посредством скрипта на сервере, а не в браузере посетителей. Некоторые перенаправления могут быть выполнены на стороне клиента — через редирект js (то есть через JavaScript редирект).

Это более гибкий и универсальный подход, и вы можете выполнить несколько типов редиректа в PHP, в отличие от других методов. Вот — наиболее частые виды редиректа, которые можно сделать в PHP: a) 301 редирект PHP (статус постоянного перенаправления), b) 302 редирект PHP (временный статус переадресации), с) Обновление.

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

Заголовок языка PHP функции

Например, предположим, вы хотите сделать редирект к этому URL http://www.somewebsite.com/target.php. В исходном PHP страницы, Вам просто следует вызвать этот скрипт редиректа:

Попробуйте также провести этот простой эксперимент на вашем локальном хостинге:

1) Откройте текстовый редактор и введите этот код:

Сохраните его как targetpage.php.

2) Откройте другой пустой текстовый файл и введите этот код:

Сохраните его как originatingpage.php.

3) Теперь запустите веб-браузер. В адресной строке браузера введите: http://localhost/originatingpage.php

4) Вы заметите, что после нажатия кнопки ввода, этот URL: http://localhost/originatingpage.php делает редирект на http://localhost/targetpage.php и на targetpage.php, и вы видите слова «Hi this is codex-x».

Одна из самых распространенных ошибок может крыться в оформлении кода html редиректа:

Попробуйте выполнить этот эксперимент:

Перейдите к скрипту originatingpage.php и добавьте любой HTML тег:

header(‘Location: http://localhost/targetpage.php’);

Предположим, у вас есть такой код:

Это – ошибка редиректа </ TITLE> </ HEAD> <body> <? PHP header("Location: http://localhost/targetpage.php"); > </ BODY> </ HTML> </p><p>2) Сохраните файл.</p> <p>3) Запустите снова скрипт originating.php в . Если вы не видите любые ошибки, вы заметите, что она по-прежнему чисто перенаправляет к targetpage.php</p> <p>4) Теперь попробуйте изменить целевой URL, чтобы указать на реальный сайт, например:</p><p> <html> <head> <title> пример ошибки редиректа</ TITLE> </ HEAD> <body> <? PHP header("Location: http://localhost/targetpage.php"); > </ BODY> </ HTML> </p><p>5) Загрузите originatingpage.php на удаленный хостинг в корневой каталог сайта.</p> <p>6) Выполните скрипт в браузере с помощью вызова originatingpage.php URL, например: http://www.php-developer.org/originatingpage.php</p> <p>7) Вы заметите, что на этот раз, вы столкнетесь с ошибкой:</p><p>Warning: Cannot modify header information - headers already sent by (output started at /home/phpdevel/public_html/originatingpage.php:6) in /home/phpdevel/public_html/originatingpage.php on line 7 </p><p>Что здесь происходит? Причиной проблемы является то, что у вас уже выведен код HTML перед заголовком функции.</p> <h2>В чем польза редиректа?</h2> <p>Благодаря редиректу, вы можете осуществлять перенаправление пользователей с одной веб-страницы на другую. Также, если например, на вашем сайте тексты ссылок на статьи пребывают в неприглядном виде (набор цифр или знаков), их можно изменить, применив транслитерацию и сделав редирект на эти ссылки. Возможности перенаправления практически неограниченны! Польза этого метода для повышения индексации страниц, улучшения показателей сайта, привлечения пользователей очевидна.</p> <p><span class="Xf6dVRetPVY"></span></p> <br><b>UCP Anti-Cheat </b> - бесплатная античитерская клиент-сервер программа для защиты сервера от недобросовестных игроков. <p>» Теперь данные с UCP сервера будут отправлятся на сайт в раздел "Монитор" <br> » Добавлен новый квар ucp_monitor <br> » HL1. Усовершенствована система защиты античита <br> » HL2. Улучшена поддержка последней версии CSS <br> » HL2. Поддержка мода Deathmatch <br> » HL2. Автоматическая замена binkw32.dll</p><p><b>Возможности: </b> </p><p>» Защита от изменения и подмены игровых файлов <br> » Защита от внедрения и изменения процесса игры <br> » Защита от использования скриптовых читов <br> » Система банов по уникальному идентификатору ПК <br> » Полуавтоматическая установка клиентской части <br> » Поддержка steam и non-steam версии игр <br> » Возможность снятия снимков экрана у игроков <br> » Отладочный режим работы для быстрого выявления проблем</p><p><b>Поддерживаемые игры: </b> </p><p>» Half-Life <br> » Condition Zero <br> » Counter-Strike 1.6 <br> » Day of Defeat <br> » Adrenaline Gamer <br> » Team Fortress Classic <br> » Counter-Strike Source <br> » MU Online <br> » Ragnarok Online</p><p><input type="button" class="uSpoilerButton" onclick="if($(" value="[+] Как установить клиентскую часть античита?"></p><p><b>Установка клиентской части: </b> </p><p>1. Запустите инсталлятор, выберите понятный вам язык и нажмите "Далее" <br> 2. Согласитесь с условиями лицензии и нажмите "Далее" <br> 3. Нажмите "Обзор" и выберите файл hl.exe, затем нажмите "Открыть" <br> 4. Выберите тип игры и не забудьте добавить ключ <b>-steam </b> если у Вас steam версия игры либо патч 33 или выше (это билд 4156, чтобы узнать номер билда, достаточно написать в консоли игры команду <b>version </b> ) <br></p><p><img src='https://i0.wp.com/cs-fun-pro.ucoz.com/_ld/11/27124061.jpg' align="" src-original=" width="100%" loading=lazy></p> <br><span><b>Значения ключей: </b> </span> <p><b>-steam </b> - нужно для стим версии игры либо если патч 33 или выше<br><b>-noforcemparms </b> - использует настройки кнопок мыши из Windows <br><b>-noforcemaccel </b> - использует настройки акселерации мыши из Windows <br><b>-noforcemspd </b> - использует настройки скорости мыши из Windows <br><b>-freq </b> - выставит указанную частоту монитора при запуске игры (бесполезно для ЖК) <br><b>-w </b> - ширина разрешения монитора (например -w 800 -h 600 устанавливает 800x600)</p><p>Если вы не снимали галочку с <span><b>"Создать директорию с ярлыками на рабочем столе" </b> </span>, после установки у Вас на рабочем столе появиться директория Ultra Core Protector c содержимым:</p><p><b>ucp.log </b> - основной файл с кодами ошибок и с информацией о конфигурации компьютера.</p><p><b>ucp.ini </b> - файл настроек запуска игры.</p><p><b> </b> <br><b>Priority=2 </b> - режим приоритета для процесса игры: <br> низкий - 1 <br> средний - 2 <br> высокий - 3 <br> реального времени - 4 <br> ниже среднего - 5 <br> выше среднего - 6</p><p><b>Game=Counter-Strike </b> - тип игры (Half-Life, Counter-Strike, Condition-Zero, Day of Defeat, Team Fortress, Counter-Strike Source)</p><p><b>Language=1 </b> - язык, на котором будут отображаться ошибки (0 - английский, 1 - русский)</p><p><b>Parameters=-nojoy -nomaster -nointro </b> </span> - параметры запуска игры, чтобы задать параметры запуска игры, их необходимо указывать в свойстве ярлыка <span><b>"Рабочий стол\Ultra Core Protector\Counter-Strike" </b> </span>.</p><p><b>ucp.dbg </b> - файл, куда будет сохранена информация при запуске античита в отладочном режиме.</p><p><b>Debug Mode </b> - отладочный режим работы античита для выявления проблем.</p><p><b>Counter-Strike </b> - отныне для запуска игры с античитом воспользуйтесь данным ярлыком.</p><p>Для установки на лицензионные версии игр, необходимо указать директорию <b>"steam\steamapps\\counter-strike\" </b>, и перед запуском античита необходимо сначало запустить steam. </p> <p><input type="button" class="uSpoilerButton" onclick="if($(" value="[+] Как установить серверную часть античита?"></p><p><b>Установка для HL1: </b> </p><p>» Для работы античита на сервере должен быть установлен AMX Mod X последней версии <br> » Скопировать <b>ucp.amxx </b> в директорию <span><b>addons/amxmodx/plugins/ </b> </span> <br> » В <span><b>addons/amxmodx/configs/plugins.ini </b> </span> добавить строчку ucp.amxx <br> » Скопировать <b>ucp.cmd </b> в корневую директорию мода игры, где liblist.gam <br> » Скопировать <span><b>banlist.txt, config.cfg, cvarlist.txt, detectlist.txt и filelist.txt </b> </span> в директорию <span><b>addons/amxmodx/configs/ucp/ </b> </span> <br> » Скопировать <b>ucp.txt </b> в директорию <span><b>addons/amxmodx/data/lang/ </b> </span> <br> » Если у Вас на сервере установлен модуль dproto ниже версии 0.4.8, то для совместимости с античитом, необходимо в его конфиге <b>dproto.cfg </b> найти строку <span><b>ValidInfoFields_Engine </b> </span> и добавить в конец строки <b>\*ucp_id </b> </p><p><b>Установка для HL2: </b> </p><p>» Для работы античита на сервере должен быть установлен последней версии <br> » Скопировать <b>ucp.smx </b> в директорию <span><b>addons/sourcemod/plugins/ </b> </span> <br> » Скопировать <b>ucp.cmd </b> в корневую директорию мода игры, где <b>gameinfo.txt </b> <br> » Скопировать <span><b>banlist.txt, config.cfg, cvarlist.txt, detectlist.txt </b> </span> и <b>filelist.txt </b> в директорию <b>cfg/ucp/ </b> <br> » Скопировать <b>ucp.phrases.txt </b> в директорию <span><b>addons/sourcemod/translations/ </b> </p><p><b>Примечание: </b> </p><p>» <span>Чтобы со steam клиентов смогли заходить на сервер, необходимо <b>отключить VAC </b>, для этого необходимо добавить ключ <b>-insecure </b> в строку запуска серверной части. </span> <br> » Чтобы автоматически установить и запустить античит у игроков заходящих без античита, необходимо добавить строку <br><span><b>Установить </b> </span> в основной <b>motd.txt </b> серверной части. После того как игрок кликнет на ссылку <b>Установить </b> , игра выгрузиться и запуститься через античит. Также следует предупредить игроков, чтобы и в преть запустить игру с античитом, необходимо запустить игру с файла ucp.exe из корневой директории игры.</p> <p><input type="button" class="uSpoilerButton" onclick="if($(" value="[+] Команды и их описание"></p><p><b>Предназначения файлов: </b> </p><p><b>config.cfg </b> - файл конфигурации античита. <br><b>banlist.txt </b> - идентификаторы забаненных юзеров. <br><b>ucp.cmd </b> - оригинальный файл текущей клиентской части, служит для идентификации и автообновления. <br><b>filelist.txt </b> - список файлов для проверки с теми, что на сервере. Ни больше 100 строк. <br><b>cvarlist.txt </b> - список квар, значения которых выставляются принудительно. Ни больше 50 строк. (по умолчанию список квар для Counter-Strike). (Только для HL1) <br><b>ucp.txt </b> - серверные сообщения на разных языках для HL1. <br><b>ucp.phrases.txt </b> - серверные сообщения на разных языках для HL2. <br><b>detectlist.txt </b> - список сигнатур нежелательного ПО на стороне клиента. Ни больше 50 строк. Синтаксис:</p><p><b>Вид поиска: </b> </p><p><b>[P] </b> - искать по названию процесса <br><b>[W] </b> - искать по классу окна <br><b>[D] </b> - искать по названию драйвера</p><p><b>Действия: </b> </p><p><b>[M] </b> - показывать сообщение <br><b>[K] </b> - выгрузить процесс <br><b>[B] </b> - bsod</p><p><b>Пример: </b> </p><p><b>[W][K]viral </b> <br><b>[W][B]ollydbg </b> <br><b>[D][M]ntice.sys </b> Need close SoftIce and restart PC</p><p><b>Команды: </b> </p><p><b>ucp_ban </b> <span><b> </b> </span> - банит на локальном сервере игрока по уникальному идентификатору компьютера. Если время бана не указана, либо указан 0, то банит навечно.</p><p><b>ucp_banid </b> <span><b> </b> </span> - ставит бан на локальном сервере по введенному идентификатору. Если время бана не указана, либо указан 0, то банит навечно.</p><p><b>ucp_unban </b> <b> </b> - снимает бан на локальном сервере по введенному идентификатору.</p><p><b>ucp_banlist </b> - показывает таблицу забаненных идентификаторов.</p><p><b>ucp_banlist_file </b> <b> </b> - путь до файла, где хранятся идентификаторы забаненных юзеров (По умолчанию "0").</p><p><b>ucp_version </b> - показывает текущую версию античита.</p><p><b>ucp_who </b> - показывает список игроков на сервере.</p><p><b>ucp_screen </b> <b> </b> - снимает скриншот с игрока и отправляет на сервер в формате jpg по выбранному протоколу. Второй параметр нужен только в режиме HTTP, чтобы посмотреть скриншот не выходя из игры.</p><p><b>ucp_autoscreen </b> <b> </b> - снимает скриншот с игрока по заданному интервалу времени (посекундно). Минимальная периодичность должна быть не ниже 60 секунд (По умолчанию "0").</p><p><b>ucp_mode </b> <b> </b> - вкл/выкл плагина античита без перезапуска сервера (По умолчанию "1").</p><p>0 - плагин выключен <br> 1 - плагин включен</p><p><b>ucp_checkfile_mode </b> <b> </b> - вкл/выкл проверки файлов из filelist.txt (По умолчанию "1").</p><p>0 - опция выключена <br> 1 - опция включена, при нахождении неоригинальных файлов удаляет их и кидаю новую <br> 2 - опция включена, при нахождении неоригинальных файлов выгружает игру с сообщением, что необходимо переустановить игру</p><p><b>ucp_upload_mode </b> <b> </b> - протокол, по которому будут отправлены скрины на сервер (По умолчанию "FTP").</p><p>FTP - <span><i>File Transfer Protocol </i> </span> <br> HTTP - <span><i>HyperText Transfer Protocol </i> </span> <br> LOCAL - передать скрины на локальный сервер (должен быть установлен плагин UCP Screen Uploader)</p><p><b>ucp_upload_host </b> <b> </b> - HOST или IP адрес сервера куда будут отправлены скрины <span>(без www, http:// и ftp://) </span>, если http или ftp сервер находится на том же сервере, что и сама игра, и у сервере есть внутренний и внешний адрес, то лучще задать вместо адреса знак "+" , в этом случае скрины с внешних игроков будут отправляться на внешний адрес сервера, а с внутренних на внутренний.</p><p><b>ucp_upload_port </b> <b> </b> - PORT сервера.</p><p><b>ucp_upload_user </b> <b> </b> - логин для идентификации на FTP сервере.</p><p><b>ucp_upload_pass </b> <b> </b> - пароль для идентификации на FTP сервере.</p><p><b>ucp_upload_path </b> <b> </b> - директория или php скрипт, куда будут закачиваться скриншоты.</p><p><b>ucp_build </b> <b> </b> - номер или номера билдов, с которых разрешается входить на сервер (По умолчанию "0", т.е. опция выключена). Можно указывать как один билд "4156" так и несколько "3779;3939;3248;3266". Античит узнает следующие билды:</p><p><b> </b> <span><b>2834, 3147, 3210, 3248, 3266, 3329, 3382, 3647, 3779, 3939, 4156, 4381, 4554 </b> </span> <br><b> </b> <span><b>3048, 3152, 3264, 3224, 3698, 3945, 4044, 4248 </b> </p><p><b>ucp_cpurl </b> <b> </b> - возможность показывать свой баннер в поле Content hosting provided by: при соединении к серверу (По умолчанию "0", т.е. опция выключена). Необходимо создать html файл, например cs.html , записать туда следующий код:</p><p><body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="margin: 0px" bgcolor="#000000"><br> <html><br> <img src='https://i0.wp.com/cs.jpg' loading=lazy><br> </html><br></body> </p><p>где cs.jpg Ваш баннер с размерами 340х56. Затем залить cs.html , cs.jpg на свой http сервер и указывать тут <span>http://Ваш адрес/cs.html </p><p><b>ucp_detect_mode </b> <b> </b> - вкл/выкл сканирования нежелательного ПО на стороне игрока (По умолчанию "1").</p><p>0 - проверка выключена <br> 1 - проверка включена</p><p><b>ucp_detect_time </b> <b> </b> - интервал в секундах для сканирования нежелательного ПО с начала входа игрока (По умолчанию "0", т.е. сканируется только при входе на сервер).</p><p><b>ucp_link </b> <b> </b> - ссылка на античит, которую будет показывать при кик-сообщении.</p><p><b>ucp_redirect_mode </b> <b> </b> - вкл/выкл функции перенаправления игроков зашедших без античита (По умолчанию "0", т.е. функция отключена).</p><p>0 - перенаправление выключена <br> 1 - перенаправление включена</p><p><b>ucp_redirect_wan </b> <b> </b> - внешний адрес сервера, куда будут перенаправлены игроки без античита зашедшие из интернета.</p><p><b>ucp_redirect_lan </b> <b> </b> - локальный адрес сервера, куда будут перенаправлены игроки без античита зашедшие из внутри сети. <br>socket_hz .</p><p>» Upload Screens - простой php скрипт для приёма скринов на http cервер.</p><p>» ATAC + UCP - интегрированный плагин "контроль нападений игроков на свою команду" для наказания по уникальному идентификатору UCP. <br></p> <p>Конфигурационный файл .htaccess является конфигом для веб-серверов на Apache. Большинство хостингов работают через этот сервер, поэтому на каждом сайте присутствует этот файл. Вебмастера могут частично управлять его работой внося в него свои изменения. В этой статье мы рассмотрим директивы и правила, которые можно менять в работе сервера.</p> <p>Самый главный файл .htaccess располагается в корне сайта:</p> <p>Его действия распространяются на текущий каталог и на все вложенные каталоги. Т.е. у владельцев сайтов есть возможность воздействовать только на работу своего проекта, не мешая работе всего сервера. Если этот файл отсутствует, то его можно создать с помощью любого блокнота. Главное, чтобы название файла было ".htaccess" - без форматов.txt, .doc и т.д.</p> <p>Через файл .htaccess чаще всего настраивают 301 редиректы на уровне сервера, что сильно ускоряет процесс перехода на новую страницу, т.к. не надо загружать промежуточную страницу. Также здесь прописывается какой файл обрабатывает 404 ошибку .</p> <p>Чуть ниже мы рассмотрим все распространенные варианты редиректов через .htaccess , а для начала ознакомимся с опциями и правилами.</p> <p>Чтобы иметь возможность работать с редиректами нужно включить модуль ReWriteEngine . Для этого необходимо прописать две строчки кода (желательно в самом верху файла .htaccess ):</p> <blockquote>Options +FollowSymLinks RewriteEngine On </blockquote> <p>Разместите эти строки в самом верху файла .htaccess , чтобы иметь возможность работать с директивами модуля mod_write.</p> <p>Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).</p> <h2>1. Правила Redirect, RewriteRule и RewriteCond</h2> <h3>1.1. Директива Redirect</h3> <p>Синтаксис Redirect :</p> <blockquote>Redirect /откуда <span>http://куда_полный_адрес </span> </blockquote> <p>Redirect устанавливает прямой редирект с одной страницы на другую.</p> <p>В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.</p> <p>Важно, чтобы страница "откуда" была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша "/" (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).</p> <p>Например</p> <blockquote>Redirect 301 /oldpage.php http://site/newpage.php </blockquote> <p>Можно также писать по другому</p> <blockquote>RedirectPermanent 301 /oldpage.php http://site/newpage.php или Redirect permanent 301 /oldpage.php http://site/newpage.php </blockquote> <h3>1.2. Директива RewriteRule</h3> <p>Директива RewriteRule устанавливает правила перехода. Синтаксис следующий:</p> <blockquote>RewriteRule Шаблон Подстановка [коды] </blockquote> <ul><li>При внешнем редиректе меняется урл адреса в строке браузера - " "</li> <li>При внутреннем - не меняет урл адреса в строке браузера - " " или "[L] "</li> </ul><h3>1.3. Директива RewriteCond</h3> <p>Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.</p> <blockquote>RewriteCond <span>Сравниваемая_Строка </span> Условие </blockquote> <p>Например, этими условиями могут быть браузер пользователя, IP-адрес , заголовок и т.д.</p> <h3>1.4. Директива RedirectMatch</h3> <p>Директива RedirectMatch аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.</p> <blockquote>RedirectMatch Откуда Куда </blockquote> <h2>2. Примеры 301 редиректов в.htaccess</h2> <p>Мы уже рассматривали множество примеров с редиректом по .htaccess в статьях:</p> <ul><li>Смена адреса сайта - редирект со старого домена на новый</li> </ul><p>Здесь мы дополним варианты редиректов, которых еще не было.</p> <h3>2.1. Редирект с одной страницы на другую</h3> <p>Редирект с site.ru/cat/oldpage на site.ru/newpage.html </p> <blockquote>RewriteRule ^cat/oldpage.* /newpage.html </blockquote> <p>Или второй вариант:</p> <blockquote>Redirect 301 /cat/oldpage <span>http://www.site.com/newpage.php </span> </blockquote> <h3>2.2. Редирект со всех файлов.htm на.html</h3> <blockquote>RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.htm$ $1.html </blockquote> <p>Или второй вариант:</p> <blockquote>RewriteRule ^(.*)\.htm$ $1.html </blockquote> <h3>2.3. Редирект всего каталога на другую страницу</h3> <p>С любой страницы в каталоге и подкаталогах /old/ будет происходит редирект на /new.php </p> <blockquote>RewriteRule ^old(.*)$ /new.php </blockquote> <h3>2.4. Удаление лишних слэшей в адресе URL</h3> <p>Например, страница /catalog///stranica.html доступна и открывается. Чтобы избежать такой ситуации и не плодить бесконечное число дублей следует записать следующий редирект</p> <blockquote>RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 </blockquote> <h3>2.5. Реврайт без редиректа</h3> <p>Можно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html , а в адресной строке будет отображаться адрес /news/happy </p> <blockquote>RewriteRule ^news/happy.* /news.html [L] </blockquote> <h3>2.6. Простановка замыкающего слеша в конце адреса главной страница</h3> <p>Например, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru . Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/ </p> <blockquote>RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ </blockquote> <h3>2.7. Удаляем директорию каталога из URL</h3> <p>Например для редиректа со страницы <span>site.com/directoriya/stranica.html </span> на site.com/stranica.html нужно прописать следующее:</p> <blockquote>RewriteRule ^directoriya/(.+)$ http://site.com/$1 </blockquote> <p>Или второй вариант:</p> <blockquote>RewriteCond <span>%{DOCUMENT_ROOT}/directoriya/$1 </span> -f RewriteRule ^(.*)$ directoriya/$1 </blockquote> <h3>2.8. Редирект GET параметров</h3> <p>Например, сделать редирект со страницы /?act=page&id=2 на /page-2/ </p> <blockquote>RewriteCond %{QUERY_STRING} act=page RewriteCond %{QUERY_STRING} id=(\d+) RewriteRule .* /page/%1/? ] </blockquote> <h3>2.9. Редирект на мобильную версию сайта m.site.ru</h3> <p>В данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT} , далее происходит замена адреса сайта на m.URL</p> <blockquote>RewriteCond %{HTTP_HOST} ^(.*)$ RewriteCond %{HTTP_USER_AGENT} <span>(?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) </span> RewriteRule ^$ http://m.%1 </blockquote> <h3>2.10. Редирект с поддомена</h3> <p>Например, выполним редирект с любой страницы поддомена poddomen.site.ru на основной домен site.ru </p> <blockquote>RewriteCond %{HTTP_HOST} ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} </blockquote> <h2>3.Другие примеры с htaccess</h2> <h3>3.1. Запретить IP-адрес и браузер</h3> <p>Запретим открывать сайт для пользователя с браузера IE с IP-адресом 172.111.222.55</p> <blockquote>RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] </blockquote> <h3>3.2. Запретить конкретный файл</h3> <p>Запретим для всех файл disable_file.html :</p> <blockquote><Files disable_file.html > deny from all </Files > </blockquote> <h3>3.3. Разрешить доступ с одного ip</h3> <p>Доступ будет разрешен только с одного ip-адреса 172.111.222.55</p> <blockquote>order deny,allow deny from all allow from 172.111.222.55 </blockquote> <h3>3.4. Запретить доступ с разных ip</h3> <p>Запретить доступ к сайту с нескольких ip-адреса 172.112.222.55, 172.113.222.55, 172.114.*.*</p> <blockquote><Limit GET POST PUT > order deny,allow deny from all deny from 172.112.222.55 deny from 172.113.222.55 deny 172.114.*.* </LIMIT > </blockquote> <h3>3.5. Редирект в URL с больших символов на маленькие</h3> <p>Все большие буквы в адресе URL будут переведены на маленькие.</p> <blockquote>RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1 </blockquote> <p>Привет, друзья. Сегодня хотелось бы обсудить очень заезженную, но всегда актуальную тему – это 301 Редирект (Permanent Redirect 301) – в seo-тусовке и без формальностей именно это подразумевается под словом «редирект» . Технически это является ответом сервера на обращение к нему, этот ответ имеет код 301, обозначающий, что адрес обращения был изменен навсегда (moved permanently). В результате всех этих хитрых махинаций мы должны получить какой-то новый конечный адрес.</p> <p>Я считаю, что вам не нужны эти технические аспекты, а потому хочу поговорить о прикладных вещах – когда и в каких ситуациях лучше использовать редирект, каким образом и при помощи каких команд можно настроить правила переадресации и т.д . А так же рассмотрим инструменты и сервисы, при помощи которых можно проверить правильность редиректов.</p> <p>Так как пост вышел очень большим, то я решил сделать <b>оглавление для вашего удобства </b>:</p> <i> </i> <h2>Когда НЕОБХОДИМО делать 301 редирект</h2> <p><b>В первую очередь редирект применяется, когда страница (группа страниц или целый раздел) сменила свой адрес </b> — чаще всего это случается при изменении структуры сайта, переименовании основообразующей части url’а или смене принципа формирования адресов (проще говоря, ЧПУ). К сожалению, не все об этом задумываются, когда что-то меняют на сайте, и в итоге возникает куча дублей, что приводит к потере позиций или даже наложению санкций со стороны поисковых систем. По своей работе я очень часто сталкиваюсь с такими ситуациями, и это стоит много нервов, чтобы все исправить и нивелировать последствия. От себя могу порекомендовать перед любой работой по смене типа ЧПУ или переделке структуры составить план текущей структуры сайта, всех его разделов и примеров конечных страниц. Все это необходимо будет проверить после завершения работ, чтобы при переходе по старому адресу мы попадали на новый, а сервер отдавал редирект с кодом 301 (а не 302).</p> <p><b>Следующий частый случай использования 301 редиректа – смена адреса сайта или склейка зеркал. </b> Если вы решили поменять адрес сайта в связи с ребрендингом компании или зарегистрировали новый более красивый и короткий домен для указания его на печатной промо-продукции — очень важно, чтобы при обращении к адресу на старом домене пользователь попадал на ту же самую страницу (а не на главную страницу), но на новом домене. Что касается промо-сайтов, то обычно они состоят из одной-двух страниц, ссылки с которых ведут на основной сайт, или же при переходе на промо-сайт сразу происходит редирект на специальную страницу основного сайта. Еще иногда при создании сайта регистрируется сразу несколько доменов, например, из-за неоднозначного написания имени компании на латинице. Чтобы интуитивно набирая адрес, пользователь попал куда надо, и регистрируются несколько доменов – очень важно, чтобы со всех «вспомогательных» доменов происходил 301 редирект на один основной адрес. Ни в коем случае нельзя допустить, чтобы по всем адресам был доступен один и тот же сайт.</p> <p><b>И еще о зеркалах – может случиться так, что ваш сайт будет доступен по адресам http://www.site.ru, http://site.ru и https://site.ru </b> (последнее редко, но бывает) – это все классические ошибки, которые нельзя допускать, и в их решении как раз участвует 301 редирект. Так же как и в случае с разными адресами сайтов, необходимо определиться с главным зеркалом (с www или без www) и настроить редиректы на основное зеркало. Конечно, поисковики не глупые и в таких ситуациях часто сами справляются, а так же им можно помочь, сделав правильные настройки в панелях вебмастера и в robots.txt (для Яндекса, директива Host). Но seo – дело тонкое, и я бы не стал полагаться на удачу, а воспользовался проверенным способом!</p> <p>Иногда случается очень неприятная ситуация, когда копия сайта оказывается доступной не только при вводе в адресной строке названия домена, но и IP-адрес сервера. Такая ситуация вряд ли может произойти на виртуальном хостинге, а вот если у вас выделенный сервер, то запросто. Это может являться причиной некорректной настройки сервера – решить проблему поможет отключение возможности доступа при обращении к ip-адресу, но лучше всего здесь выручит 301-редирект на уровне веб-вервера (apache или nginx). Пару месяцев назад у меня случилась как раз такая ситуация – у меня был выделенный сервер, на котором висела часть сайтов, но под один из сайтов я решил взять еще один отдельный сервер. Я перенес сайт, все работало как часы, и вот однажды натыкаюсь в выдаче Гугла на клон моего сайта – шок, паника – оказалось, что это ip адрес моего нового сервера и, разумеется, на нем живет мой сайт, а при обращении сервер отдает ответ 200 OK, и Google проиндексировал его полностью. На предыдущем сервере такой проблемы не было, там изначально был настроен 301-редирект с ip на домен, указанный в качестве основного для этого ip. Теперь я научен горьким опытом и всегда проверяю такие вещи – будьте в курсе и вы, не повторяйте ошибок. Проблему решили путем добавления в конфиги веб-сервера nginx 301 редиректа на основной домен, пример кода покажу в практической части поста ниже.</p> <p><b>Ситуация подобная предыдущей – когда копия сайта находится и доступна через служебный тестовый домен </b>, например, вида site.hosting.ru. Такие случаи в моей практике тоже встречаются, и, в отличие от предыдущего случая, это свойственно как раз для виртуального хостинга. Для чего такое существует? Например, у вас еще не куплен домен или вы переносите сайт с одного хостинга на другой, а NS сервера для домена не сменили, или еще не обновились записи DNS у провайдера. В таких ситуациях и делают тестовые адреса, где вы можете все настроить и установить, прежде чем перенаправлять адрес сайта на новый хостинг. И вот некоторые хостеры грешат тем, что не закрывают доступ к таким техническим адресам и при этом даже не запрещают их индексацию. Если и у вас случилась эта неприятная ситуация, то стоит попробовать прописать 301-редирект с технического адреса на основной в файле.htaccess.</p> <p>Ну и, конечно же, 301 редирект очень любят применять правильные сеошники для борьбы с различными дублями страниц. Почему только правильные сеошники? Да потому, что неправильные хуй забили на сайт клиента и, что вполне вероятно, даже не заходя на сайт, стали закупать ссылки – увы, это не редкость. Ко мне периодически обращаются заказчики, которые хотят проверить добросовестность своих подрядчиков/сотрудников, отвечающих за оптимизацию и продвижение сайта, насколько качественно идет работа – – и пока еще ни разу не было такого, чтобы я не нашел на сайтах ошибок или недоработок. Так что, имейте в виду – я всегда рад вам помочь. Вернемся же к дублям – я считаю, что вместо того чтобы закрывать дубли от индексации, необходимо делать редирект на основной адрес, а это уже не так интересно. Разумеется, существует масса случаев, когда дубли вынужденные, и тогда без канонизации не обойтись, но если есть возможность сделать редирект, обязательно делайте его. Частые случаи дублей, которые необходимо проверять всегда: адреса со слешем на конце и без, адреса с параметрами и метками – как это решать, я расскажу ниже.</p> <h2>Когда МОЖНО делать 301 редирект</h2> <p>В этом разделе много не напишешь, но я постараюсь. Очень надеюсь, что после прочтения вы в комментариях добавите мне парочку идей.</p> <p><b>Redirect 301 можно использовать в качестве ответа сервера вместо ошибки 404 Not Found </b> – другими словами, пользователь, перейдя по неправильной ссылке или на несуществующую страницу, увидит не сообщение, мол, «Извините, такой страницы больше нет», а будет перемещен на другую существующую страницу. Это очень спорный момент среди специалистов, а потому я свое мнение никому не навязываю. Но я предпочитаю использовать именно редирект вместо 404 ошибки, и тут существует несколько вариантов развития событий… Смотрите, есть 2 категории 404 ошибок: первая – классическая, когда страницу действительно удалили, вторая – когда появление ошибки связано с кривыми внешними ссылками. В первом случае, наверное, не стоит делать редирект, а оставить 404 ошибку как она есть. А вот во втором случае стоит озаботиться редиректом на правильный url-адрес, если его можно восстановить из битой ссылки, или редиректом на главную страницу (или категорию).</p> <h2>Когда НЕ СЛЕДУЕТ делать 301 редирект</h2> <p>Несколько слов о том, когда редирект может вам навредить, а потому его не стоит использовать в следующих ситуациях.</p> <p>Самое главное, чтобы не наделать ошибок, не стоит связываться с редиректами, если вы на 100% не уверены в том, что вы делаете или в чем-то сомневаетесь. Примите это как дружеский совет:)</p> <p><b>Перманентный редирект не стоит использовать для временных решений </b>, это очевидно из его названия – для временного перемещения используйте 302 Moved Temporarily. При этом не произойдет склейки страниц и страницу с редиректом можно будет в любое время восстановить.</p> <p><b>Если с вашим доменом случились проблемы, например, фильтры, бан и т.п., и вы решили сменить адрес сайта </b> (домен), то не стоит делать 301 редирект со старого домена на новый — в результате вы «приклеите» к новому домену и все проблемы старого. То есть в итоге ничего и не изменится. Да, было какое-то время решение выхода из под гугло-фильтра Пингвин при помощи полного 301-редиректа со старого домена на новый. Действительно все позиции восстанавливались до уровня как до санкций, и это казалось панацеей от злого Пингвина, но при очередном апдейте алгоритма эта особенность была учтена и новый домен так же попадал под фильтр, в итоге ничего не улучшалось после смены домена. Если уж вы решили сменить домен, то можно попробовать перенести весь контент на новый домен, а на старом его удалить и повесить заглушку с сообщением о переезде, а еще лучше начать все «с нуля».</p> <p>Существует очень много способов сделать 301-редирект: через htaccess, php, javascript, настройки сервера и т. д. – так вот не надо пытаться использовать сразу все методы одновременно , слишком велика вероятность «разногласий» между разными способами и можно, например, получить бесконечное циклическое перенаправление.</p> <p>Когда вы работаете со сложной структурой сайта или перерабатываете большой портал, часто случаются множественные редиректы или длинные цепочки. Это значит что редирект происходит не в один шаг, а в два и более – это плохая ситуация и ее надо по возможности избегать. При переходе по такой ссылке поисковый робот, получив несколько перенаправлений подряд, может подумать, что его обманывают и прекратить следовать дальше и вообще перестать учитывать ссылки. Вот вам пример из моей практики, однажды мне на аудит попался сайт с такой неожиданной цепочкой:</p> <p>http://site.ru/tax/term/30 -><br> http://www.site.ru/tax/term/30 -><br> http://www.site.ru/tax/term/30/ -><br> http://www.site.hosting.ru/404.php -><br> http://www.site.ru/404.php</p> <p>А еще в итоге страница http://www.site.ru/404.php, которая должна отдавать 404 ошибку, отдает ответ 200 OK. Это даже мне взорвало мозг, а представьте, что подумал бы поисковый робот, попав в такую карусель! Мало того, что в цепочке поучаствовали три разных домена, так еще и страница ошибки говорит, что она не ошибка и ее надо индексировать.</p> <p><b>По возможности стремитесь к отсутствию редиректов внутри сайта </b> – если внешние ссылки на сайт исправить уже нельзя и редирект неизбежен, то внутренние ссылки надо стараться исправлять. Может быть это и не скажется на качестве индексации и ранжировании, но и нельзя быть уверенным наверняка, а потому лучше избегать таких спорных ситуаций. В отслеживании внутренних редиректов и вообще ошибок внутри сайта вам поможет замечательная .</p> <p>Составляя привила редиректов в.htaccess исключайте реальные адреса директорий и файлов на сервере и следите за выборкой. Ситуация для сайта, попавшего мне однажды на аудит – в борьбе с дублями страниц категорий со слешем на конце и без, вебмастер перестарался немного и наоборот только усугубил проблему. Мало того, что под правила перезаписи попали и реальные файлы js-скриптов и css-стилей из-за чего они перестали корректно работать, так еще и некоторые страницы получили ненужный слеш на конце и появились дубли. Друзья, тщательно следите, чтобы составленные правила распространялись только на ту группу адресов, с которой вы работаете, и ограничивайте все остальные.</p> <p>Для поиска проблемных страниц и их адресов, от которых необходимо избавиться, используйте возможности панелей вебмастера от Яндекс и Google. Для Яндекса Вебмастер: Выбираем сайт –> Индексирование сайта –> Исключенные страницы. Для Google Webmaster: Выбираем сайт –> Оптимизация –> Оптимизация HTML; А так же: Выбираем сайт –> Конфигурация –> Параметры URL.</p> <p><b>Особенности индексации и переиндексации редиректов в Яндекс и Google. </b> Когда вы будете бороться с дублями и проблемными адресами, разумеется, вы будете ждать удаления ошибок из панелей вебмастера, тут есть некоторые особенности. С Google все просто – настроили редиректы, изменения проиндексируются в течение 2 недель, за это же время начнут исчезать ошибки и из панели вебмастера, обычно через месяц все ошибки пропадают. С Яндексом же есть тонкость, и заключается в следующем – после простановки редиректов можно ждать пропадания ошибок из панели вечно, я ждал однажды полгода, пока не написал в поддержку, где мне сообщили, что помимо редиректа необходимо дополнительно закрыть проблемные страницы в robots.txt и только тогда они пропадут из панели вебмастера.</p> <h2>Permanent Redirect 301 через.htaccess</h2> <p><b>Такой способ установки редиректов является самым популярным и простым. </b> Хотя, признаться, далеко все не так просто, как кажется, так что я планирую написать отдельный пост про htaccess. Из плюсов данного способа можно отметить, что редирект срабатывает на уровне сервера и до запуска обработки любых скриптов сайта и не несет дополнительной нагрузки.</p> <p><b>У вас на сервере (в корне, там где главный index.php) уже наверняка есть файл.htaccess. </b> Если этот файл не видно:</p> <ul><li>Проверьте настройки ftp-менеджера, он может скрывать системыне файлы, коим и является файл htaccess</li> <li>Зайдите в файловый менеджер через панель управления хостера и проверьте права для файла. Я имею ввиду не CHMOD, а группу и пользователя, например, там может стоять пользователь root, а вы подключаетесь через ftp используя доступ пользователя владельца домена.</li> <li>Банально файла может не быть:) Тогда его следует создать, но под windows иногда возникает проблема, т.к. по сути файл.htaccess видится системой как файл без имени и только с расширением. Предлагаю простой способ – создаем обычный txt-файл, добавляем в него строку «RewriteEngine On» (без кавычек), загружаем txt-файл на сервер, на сервере переименовываем файл в.htaccess</li> </ul><p><b>Большинство правок, связанных с редиректом следует писать в самом начале файла после строки «RewriteEngine On» </b>, чтобы эти правила обрабатывались в первую очередь. Важно соблюдать последовательность действий, т.к. команды обрабатывается сервером построчно с самого начала и до первого вхождения. Иначе говоря, надо всегда начинать с частной и заканчивать более общей выборкой.</p> <p><b>Давайте рассмотрим несколько самых распространенных и полезных примеров: </b></p> <p>301 редирект для домена с www.site.ru на site.ru</p> <p>RewriteCond %{HTTP_HOST} !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1 </p> <blockquote> <p>Вышеописанные варианты редиректа отлично работают и не требуют никаких правок с вашей стороны — только вставить в.htaccess файл. Однако для 100% надежности я бы посоветовал вам другой вариант:</p> <table><tr><td class="code"> RewriteCond %{HTTP_HOST} !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1 </td> </tr></table><p>RewriteCond %{HTTP_HOST} !^www.site.ru$ RewriteRule ^(.*)$ http://www.site.ru/$1 </p> <table><tr><td class="code"> RewriteCond %{HTTP_HOST} !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1 </td> </tr></table><p>RewriteCond %{HTTP_HOST} !^site.ru$ RewriteRule ^(.*)$ http://site.ru/$1 </p> <p>Первый для тех, у кого основной домен с www, второй – у кого без www. Соответственно в обоих примерах надо вместо «site» вписать название вашего домена.<br><b>Итак, чем же данные варианты лучше? </b> Очень просто, они проверяют не только отсутствие/наличие www в имени домена, но проверяют и имя домена на полное его соответствие.<br> Живой пример: Наверняка вы сталкивались с тем, что неожиданно сайт может проиндексироваться по служебному адресу на хостинге (такой адрес выдается, чтобы к сайту можно было обратиться до привязки вашего реального домена), какому-нибудь зеркалу или вообще ip-адресу! Так вот универсальные правила будут лишь верифицировать отсутствие/наличие www, при этом все равно, к какому домену обращается пользователь или поисковый робот.<br> Так вот воспользовавшись продвинутым вариантом, вы на 146% будете уверены, что ваш сайт будет доступен только и исключительно по указному лично вами доменному имени и с учетом www. Я пользуюсь только таким вариантом и вам рекомендую!</p> </blockquote> <h3>301 редирект с http на https</h3> <p><b>В свете массового перехода сайтов на защищенный протокол, необходимо знать, как сделать редирект с http на https. </b> Кстати, если вы еще не выбрали SSL-сертификат, вам стоит прочитать мой пост про .</p> <p>Ниже я предлагаю вам несколько вариантов 301 редиректа с протокола http на https, которые могут работать либо не работать в зависимости от конфигурации именно вашего сервера, но какое-то из правил вам точно подойдет:</p> <table><tr><td class="code"> RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 </td> </tr></table><p>RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 </p> <table><tr><td class="code"> RewriteCond %{SERVER_PORT} !^443 $ RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} </td> </tr></table><p>RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} </p> <table><tr><td class="code"> RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} </td> </tr></table><p>RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} </p> <table><tr><td class="code"> RewriteCond %{HTTP:X-HTTPS} !1 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 </td> </tr></table><p>RewriteCond %{HTTP:X-HTTPS} !1 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 </p> <p>RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} </p> <p>Редирект с протокола https на http (честно, не знаю, зачем вам может это понадобиться):</p> <table><tr><td class="code"> RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 </td> </tr></table><p>RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 </p> <p>Недавно я написал очень подробную инструкцию . Если вы планируете переезд с https на https, вы обязаны ее прочитать!</p> <p><b>Внесу некоторую ясность в непонятную абракадабру: </b></p> <ul><li>RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule. С помощью регулярных выражений задаются шаблоны строк.</li> <li>Переменные сервера: <ul><li>%{REQUEST_URI} — часть урла без доменного имени и GET-параметров, например, для страницы, которую вы сейчас читаете: blog/post/4393 ,</li> <li>%{HTTP_HOST} — хост или доменное имя, например: сайт</li> <li>%{QUERY_STRING} — строка с набором GET параметров, то есть часть урла после знака вопроса (и до решётки якоря, если он есть).</li> <li>%{REQUEST_FILENAME} — полный путь в файловой системе сервера к файлу или скрипту соответствующим этому запросу..php , а вот в файловой системе сервера это страшная строка /var/www/сайт/data/www/сайт/index.php .<br> Бывает, делая редирект, вы получаете неожиданный результат, например, хотели в адресе http://site.ru/page-name?post=17434801_4060 убрать параметры post=17434801_4060 , указали соответствующие правила (о них ниже будет написано), а в итоге получили строку http://site.ru/usr/local/www/site.ru/www/page-name — от параметров избавились, но получили странный адрес. Это все потому, что вы не указали в начале файла после RewriteEngine On директиву RewriteBase /, которая устанавливает конкретный, базовый URL для преобразований в контексте каталога.</li> </ul></li> <li>Метасимволы используются для задания групп символов или «меток» в шаблоне: <ul><li>^ — метка начала строки,</li> <li>$ — метка конца строки,</li> <li>! – отрицание,</li> <li>\ — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,</li> <li>. – точка, обозначает любой символ, но только один,</li> <li>() – группировка.</li> </ul></li> <li>Модификаторы ставятся после обычных символов, метасимволов или их групп и расширяют возможности использования шаблонов: <ul><li>? — символ повторяется 0 или 1 раз,</li> <li>* — Повторяется от 0 до 65536 раз,</li> <li>+ — Повторяется от 1 до 65536 раз.</li> </ul></li> <li>Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую: <ul><li>NC — (nocase) отключает проверку регистра символов.</li> <li>R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо.</li> <li>L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.</li> </ul></li> </ul><p><b>Самый популярный случай — 301-редирект с index.php (html) на главную страницу. </b> На 90% сайтов встречается проблема дублирования главной страницы по адресам http://site.ru и http://site.ru/index.php (или index.html, index.htm или любой другой вариант, не принципиально, а то и все сразу). Где-то это явно, когда, например, ссылка из логотипа ведет на site.ru, а ссылка в меню ведет на site.ru/index.php, где-то не явно, когда дубль находится при вводе адреса с index.php вручную. Важно просто решить проблему. И я предлагаю универсальный вариант, вот он:</p> <table><tr><td class="code"> RewriteCond %{THE_REQUEST} ^{3 ,9 }\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 </td> </tr></table><p>RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 </p> <p>Просто вставьте этот код без изменений после строки после строки «RewriteEngine On» и нет проблем!</p> <p><b>Многие, кто начинает бороться с дублями на сайте, задаются вопросом, а откуда берутся такие вот ссылки </b>, которые дублируют основную страницу http://site.ru/page-name.html<b>&post=-1234567_8901 </b>? Откуда взялась приставка &post=-1234567_8901 – это «добро» берется из вконтакте, когда кто-то делится ссылкой на ваш сайт у себя на стене, в группе или паблике, то автоматически добавляется подобная строка, видимо, для отслеживания какой-то статистики.</p> <p>Чтобы избавиться от этой ерунды раз и навсегда необходимо добавить в htaccess:</p> <p>RewriteCond %{REQUEST_URI} ^(.*)\&sa= RewriteRule ^(.*)\&sa=(.*)$ $1 </p> <p>Как видите, никакой разницы между этим и предыдущим случаем нет, пусть у вас в url"е будет &post= или &sa= или что угодно — решение одинаковое, просто надо заменить очевидные части кода. Понятно же, правда?</p> <p><b>Избавляемся от параметров или меток в адресе </b></p> <p>Вопрос задавался и в комментариях и много раз на форуме, потому нельзя его обойти стороной. Что делать вот с такими дублями: http://site.ru/?abrakadabra или более реальный случай http://site.ru?utm_source=twitterfeed&utm_medium=twitter</p> <p>Данный случай немного отличается от следующего пункта, где мы будем избавляться от параметров для php-скрипта, так как тут обычный адрес и параметры в скрипт мы не передаем. Вот решение:</p> <p>RewriteCond %{QUERY_STRING} ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php </p> <p>%{QUERY_STRING} — это строка с набором переменных для PHP, часть урла после знака вопроса (и до решётки якоря, если он есть).</p> <p>Вызываем url — http://site.ru/index.php?lang=ru </p> <p>RewriteCond %{QUERY_STRING} ^lang=ru $<br> Запрашиваемый url попадает под это правило, других правил нет, поэтому будет выполнен RewriteRule строкой ниже.<br> RewriteRule ^(.*) \.php\?(.*) $ $1 \.php </p> <p>Исходный url: http://site.ru/index .php?lang=ru <br> Шаблон разборки url’а: ^(.*) \.php\?(.*) $<br> URL будет разобран по переменным: $1 = http://site.ru/index , $2 = lang=ru и собран обратно уже в виде http://site.ru/index .php ($1 \.php)<br> А далее будет 301 редирект на новый url.</p> <p><b>Пример правил при смене структуры сайта </b></p> <table><tr><td class="code"> RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 </td> </tr></table><p>RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 </p> <p>Вот такие строки мне пришлось добавить в htaccess файл, когда я сменил структуру своего блога.</p> <p>Раньше у меня были адреса такие: https://сайт/post/4358 и https://сайт/post/category/seo, что как-то ломало логику в структуре – ведь блог это только часть сайта, но почему-то посты принадлежат сайту, а не блогу, а категории принадлежат постам, что тоже совсем нелогично..info/blog/category/seo — теперь блог как отдельный раздел сайта, а посты принадлежат ему, и категории принадлежат блогу, а не постам.</p> <p>Из этого же примера видно, что важно соблюдать последовательность правил. Если бы я поменял строки местами, то есть впереди бы шла строка RewriteRule ^post/(..info/blog/post/category/seo а не как надо на https://сайт/blog/category/seo.</p> <p><b>И последний пример — разбор частой ошибки с адресом от корня сервера </b></p> <p>Например, вы решили исправить такую проблему, когда страница категории доступна по двум адресам http://site.ru/razdel/podrazdel/index.php и http://site.ru/razdel/podrazdel/. Второй url является правильным и основным, а url с index.php на конце является полным дублем, от которого необходимо избавиться.</p> <p>Для того чтобы сделать редирект с index.php на категорию вы прописываете правило:</p> <p>RewriteEngine On RewriteBase /</p> <p><b>301-редирект со страницы на страницу, на новый адрес </b></p> <p>Самый простой случай, когда надо сделать редирект одной страницы на другой адрес. Если же вам надо сделать редирект для нескольких страниц, то придется писать несколько правил, но в этом случае лучше воспользоваться шаблонами, описанными выше. Есть несколько совершенно идентичных вариантов синтаксиса:</p> <table><tr><td class="code"> Redirect 301 /page-name1.html http://site.ru/page-name2.html Redirect permanent /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http://site.ru/page-name2.html </td> </tr></table><p>Redirect 301 /page-name1.html http://site.ru/page-name2.html Redirect permanent /page-name1.html http://site.ru/page-name2.html RedirectPermanent /page-name1.html http://site.ru/page-name2.html</p> <p>Выбирайте один из трех, а лично я предпочитаю первый вариант — он короче, проще и понятнее. Кстати, здесь site.ru может быть не обязательно тем же самым доменом, но любым другим.</p> <p>На этом закончим с.htaccess и перейдем к PHP.</p> <h2>Permanent Redirect 301 с помощью PHP</h2> <p>Обычно PHP редирект я использую, когда возникают трудности с.htaccess или оказывается так, что функция на php оказывается более логичной и понятной.</p> <p><b>Сам синтаксис 301 редиректа на php выглядит следующим образом: </b></p> <table><tr><td class="code"> header (); header ("Location: http://site.ru" ); die("Redirect" ); </td> </tr></table><p>header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru"); die("Redirect");</p> <p>Эти строки сообщают браузеру клиента, что с какой-то запрошенной страницы необходимо произвести перманентный редирект на адрес http://site.ru. При этом http://site.ru может являться не только адресом главной страницы текущего сайта, но может быть и любым другим сайтом. Если же что-то пошло не так и произошла ошибка, то в окне браузера мы увидим надпись «Redirect».</p> <p>Чтобы было понятнее, приведу несколько примеров функций, которые я написал для своего блога сайт, пытаясь решить определенные задачи.</p> <p><b>Функция, позволяющая убрать определенный кусок из url </b></p> <table><tr><td class="code"> if (strpos($_SERVER["REQUEST_URI" ], "http://сайт" ) !== false) { $real_page_url = "http://сайт" .str_replace ("/http://сайт" , "" , $_SERVER["REQUEST_URI" ]); header (<span>"HTTP/1.1 301 Moved Permanently" </span>); header ("Location: $real_page_url" ); die("Redirect" ); } </td> </tr></table><p>if (strpos($_SERVER["REQUEST_URI"], "http://сайт") !== false) { $real_page_url = "http://сайт"..1 301 Moved Permanently"); header("Location: $real_page_url"); die("Redirect"); }</p> <p>Однажды у меня возникла проблема, что в панели вебмастера вылезла куча 404 ошибок, адреса этих страниц были вида https://alaev..е. откуда-то в адресе появился дублирующий адрес сайта. И тогда я написал функцию, которая проверяет, есть ли в URI (заметьте, не URL, а URI) вхождение «http://сайт», и если присутствует, то вырезаем из адреса этот кусок и записываем результат в переменную $real_page_url, а потом делаем 301-редирект на верный адрес из переменной.</p> <p><b>Функция, убирающая конечный слеш из url </b></p> <table><tr><td class="code"> if (($_SERVER["REQUEST_URI" ], - 1 , 1 ) == "/" ) { $requested_url = rtrim($requested_url, "/" ); header (<span>"HTTP/1.0 301 Moved Permanently" </span>); header ("Location: $requested_url" ); die("Redirect" ); } </td> </tr></table><p>if (($_SERVER["REQUEST_URI"], - 1, 1) == "/") { $requested_url = rtrim($requested_url, "/"); header("HTTP/1.0 301 Moved Permanently"); header("Location: $requested_url"); die("Redirect"); }</p> <p>Вот такая вот простейшая функция, которая смотрит, есть ли в запрошенном адерсе страницы слеш на конце, и если он есть, то слеш обрезается и происходит 301-редирет на адрес без слеша.</p> <p>Существует еще масса вариантов, позволяющих отдавать команду перенаправления на разных языках программирования, типа ASP, Ruby on Rail и т.д., но я с этими языками не знаком, потому не буду тут умничать и пудрить вам мозги. <b>Еще возможны редиректы при помощи метатега meta refresh, а так же редиректы на javascript </b> – но это участь нечистых на руку дорвейщиков, а поисковики эти редиректы не понимают, они получаю ответ от сервера 200 OK. Так что эти варианты мы не рассматриваем.</p> <h2>Permanent Redirect 301 для сервера nginx</h2> <p>Помните я писал про зеркало моего сайта, доступного по ip? В итоге проблему решили редиректом, прописанным в конфигурационном файле сервера, обычно он расположен тут /etc/nginx/nginx.conf. Там прописали вот такие строки:</p> <table><tr><td class="code"> server { listen 1.2.34.123:80 default; server_name _; rewrite ^/(.*)$ http://site.ru/$1 permanent; } </td> </tr></table><p>server { listen 1.2.34.123:80 default; server_name _; rewrite ^/(.*)$ http://site.ru/$1 permanent; }</p> <p>Здесь говорится о том, что если идет обращение в ip-адресу через 80-ый порт, то необходимо делать permanent redirect на site.ru.</p> <p>Однако техподдержка не рекомендовала мне так поступать со словами: «Более корректно будет настроить HTTP-сервер таким образом, чтобы он просто закрывал соединение, если к нему обращаются по адресу, который не указан явным образом в конфигурации HTTP-сервера, это наиболее надёжный, простой, безопасный и наименее требовательный к ресурсам сервера вариант. Через некоторое время страницы, которые будут недоступны, скорее всего, будут выкинуты из индекса поисковых систем.»</p> <p>Следующий совет был такой: «Когда потребуется просто закрывать соединение вместо перенаправления, то укажите вместо строки "rewrite ^/(.*)$ http://site.ru/$1 permanent;" такую строку "return 444;". Затем выполните: "invoke-rc.d nginx reload"».</p> <p>Вдруг это кому поможет.</p> <p><b>Примеры редиректов в самых распространенных случаях </b></p> <p>Редирект для домена www.site.ru на site.ru</p> <p>server { listen 80; server_name site.ru; rewrite ^ http://www.site.ru$request_uri? permanent; }</p> <p>Редирект с адреса http://site.ru/index.php на http://site.ru/</p> <table><tr><td class="code"> location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } </td> </tr></table><p>location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }</p> <p>Вот как-то так. Я в настройках конфигов для nginx не силен, всегда обхожусь настройками апача, так что, если у вас появились какие-то вопросы по nginx, то я вряд ли смогу вам помочь...</p> <h2>Как проверить HTTP заголовки и статусы ответа сервера</h2> <p>Я хотел в этом разделе описать различные сервисы и плагины для проверки ответа сервера, но понимаю, что данный пост уже настолько большой по объему, что придется ограничиться просто ссылками на расширения для браузеров Chrome и Firefox.</p> <p><b>Дополнение HttpFox для Firefox </b></p> <p>HttpFox (вот ссылка на аддон) — это мой любимый инструмент отслеживания http-заголовков. HttpFox построчно показывает ход загрузки страницы, что позволяет отслеживать, например, цепочки редиректов и вообще порядок и скорость загрузки страницы. Если вы пользуетесь Мозиллой, то однозначно рекомендую.</p> <p><b>Расширение HTTP Headers для Chrome </b></p> <p>Сам я не пользуюсь расширением HTTP Headers (вот ссылка на него), но интернеты мне посоветовали обратить внимание именно на него. Если у вас есть варианты получше, пожалуйста, отпишитесь в комментариях.</p> <p>На этом я завершаю свой ужасно длинный и нудный пост, друзья.<br> Спасибо, что дочитали его до конца, я надеюсь, он оказался для вас реально полезным.</p> <p>Довольно важный момент при настройке сайта. Неправильно настроенный редирект может сильно повредить поисковой выдачи сайта. Самые распространённые ситуации, в которых приходиться использование Permanent Redirect 301:</p> <ul><li><span>Смена адреса сайта </span> - вы купили свой домен и решили переехать с site.example.com на site.ru</li> <li>Склейка зеркал - если ваш сайт доступен по адресу www.site.ru и site.ru, поисковые системы могут посчитать это как два разных сайта, поэтому для начала необходимо определиться с главным зеркалом (с www или без www) и настроить редиректы на основное зеркало.</li> <li><span>Когда страница (одна или несколько) сменила свой адрес </span> - в какой то момент стало понятно, что адреса http://example.com/index.php?option=com_content&task=view&id=23&Itemid=1 не есть хорошо, и нужно их переделать в <b>http://example.com/sport/news12 </b>, но жалко терять позиции в индексе поисковых систем (поскольку для них это будет новая статья).</li> <li><span>Еще один способ для борьбы с дублями страниц </span></li> </ul><p>Важно: если страница перемещена временно используйте 302 Moved Temporarily. Склейки страниц в этом случае не произойдет и страницу с редиректом можно будет всегда восстановить.</p> <h2>Permanent Redirect 301 для apache (.htaccess)</h2> <p>Вставлять правила нужно сразу после строк:</p><p>RewriteEngine On RewriteBase / <span># чтобы обрезать полный путь, от корня сервера до корня сайта </p><p>сами правила задаются при помощи регулярных выражений, напомним синтаксис:</p> <ul><li>Метасимволы, для задания групп символов или «меток» в шаблоне: <ul><li>^ - метка начала строки,</li> <li>$ - метка конца строки,</li> <li>! - отрицание,</li> <li>\ - экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,</li> <li>. - точка, обозначает любой символ, но только один,</li> <li>() - группировка.</li> </ul></li> <li>Модификаторы, ставятся после обычных символов, метасимволов или их групп: <ul><li>? - символ повторяется 0 или 1 раз,</li> <li>* - повторяется от 0 до 65536 раз,</li> <li>+ - повторяется от 1 до 65536 раз.</li> </ul></li> <li>Флаги, определяют дополнительные опции для данного правила: <ul><li>NC - (nocase) отключает проверку регистра символов.</li> <li>R - (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY).<br> С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY). Как вы понимаете, это то самое, что нам и надо.</li> <li>L - (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.</li> </ul></li> </ul><p>Рассмотри наиболее часто встречаемые ситуации:</p> <h3></h3><h3></h3> RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1 <span>RewriteCond обозначаем условие, при совпадении с которым будет выполнено правило RewriteRule. </span> <h3>Редирект с index.php (html) на главную страницу</h3> RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 <h3>Редирект при смене структуры сайта</h3> RewriteRule ^post/category/(.*)$ blog/category/$1 RewriteRule ^post/(.*)$ blog/post/$1 <h2>Permanent Redirect 301 на PHP</h2> <p>Чтобы сообщить браузеру о том, что с запрошенной им страницы нужно произвести редирект на адрес http://site.ru выполните команды:</p><p>Header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru"); exit(); </p><h2>Permanent Redirect 301 для nginx</h2> <p>Правила редиректа описывается в секции server.</p> <h3>Редирект с www.site.ru на site.ru</h3> server { listen 80; server_name www.site.ru; rewrite ^ http://site.ru$request_uri? permanent; } <p>или общее правило для всех сайтов:</p><p>Server { server_name ~^(?! www\.); rewrite ^ http://www.$host$request_uri permanent; } </p><h3>Редирект для с site.ru на www.site.ru</h3> server { listen 80; server_name site.ru; rewrite ^ http://www.site.ru$request_uri? permanent; } <h3>Редирект с index.php на главную страницу</h3> location = /index.php { if ($request_uri = /index.php) { rewrite ^ http://$host? permanent;#301 redirect } fastcgi_pass unix:/tmp/fastcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> <div class="td_block_wrap td_block_related_posts td_with_ajax_pagination td-pb-border-top td_block_template_5"> <div class="td_block_inner"> <div class="td-related-row"> <h3>Похожие материалы</h3> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="/to-the-developer/php-poisk-vhozhdeniya-poisk-podstroki-v-stroke-s-pomoshchyu-php-poisk-pozicii.html" rel="bookmark" title="Поиск подстроки в строке с помощью PHP"><img width="218" height="150" class="entry-thumb" src="/uploads/ee474107af5635be09882635250879b0.jpg" sizes="(max-width: 218px) 100vw, 218px" alt="Поиск подстроки в строке с помощью PHP" title="Поиск подстроки в строке с помощью PHP"/ loading=lazy></a></div> <a href="/category/programs/" class="td-post-category">Программы</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/to-the-developer/php-poisk-vhozhdeniya-poisk-podstroki-v-stroke-s-pomoshchyu-php-poisk-pozicii.html" rel="bookmark" title="Поиск подстроки в строке с помощью PHP">Поиск подстроки в строке с помощью PHP</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="/to-the-developer/chto-oznachaet-vash-nomer-telefona-kak-vybrat-blagopriyatnyi.html" rel="bookmark" title="Как выбрать благоприятный номер Хорошо если номер телефона заканчивается на"><img width="218" height="150" class="entry-thumb" src="/uploads/8aa964c70a58eb5c7a068e956219957c.jpg" sizes="(max-width: 218px) 100vw, 218px" alt="Как выбрать благоприятный номер Хорошо если номер телефона заканчивается на" title="Как выбрать благоприятный номер Хорошо если номер телефона заканчивается на"/ loading=lazy></a></div> <a href="/category/programs/" class="td-post-category">Программы</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/to-the-developer/chto-oznachaet-vash-nomer-telefona-kak-vybrat-blagopriyatnyi.html" rel="bookmark" title="Как выбрать благоприятный номер Хорошо если номер телефона заканчивается на">Как выбрать благоприятный номер Хорошо если номер телефона заканчивается на</a></h3> </div> </div> </div> <div class="td-related-span4"> <div class="td_module_related_posts td-animation-stack td_mod_related_posts"> <div class="td-module-image"> <div class="td-module-thumb"><a href="/images/chto-takoe-tehnologii-amd-overdrive-i-kak-razognat-cpu-processory-kak.html" rel="bookmark" title="Процессоры Как разогнать процессор amd с помощью программы"><img width="218" height="150" class="entry-thumb" src="/uploads/3fcef2b8bca0c409fab2fd0b1306ea9c.jpg" sizes="(max-width: 218px) 100vw, 218px" alt="Процессоры Как разогнать процессор amd с помощью программы" title="Процессоры Как разогнать процессор amd с помощью программы"/ loading=lazy></a></div> <a href="/category/programs/" class="td-post-category">Программы</a> </div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/images/chto-takoe-tehnologii-amd-overdrive-i-kak-razognat-cpu-processory-kak.html" rel="bookmark" title="Процессоры Как разогнать процессор amd с помощью программы">Процессоры Как разогнать процессор amd с помощью программы</a></h3> </div> </div> </div> </div> </div> </div> </div> </div> <div class="td-pb-span4 td-main-sidebar"> <div class="td-ss-main-sidebar"> <div class="td_block_wrap td_block_21 td_block_widget td-pb-border-top td_block_template_5 td-column-1"> <div class="td-block-title-wrap"> <h4 class="td-block-title"><span class="td-pulldown-size">КУЛЬТУРА</span></h4> </div> <div id=td_uid_16_5a560a8c3550c class="td_block_inner"> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/office/meizu-mx5-proshivka-smartfona-meizu-mx5-proshivka-smartfona-kupit-meizu-mx5-russkaya.html" rel="bookmark" title="Meizu MX5 прошивка смартфона Купить meizu mx5 русская прошивка"><img width="150" height="150" class="entry-thumb" src="/uploads/9fc92096bb7cc8a783fa7bde8d5c9154.jpg" alt="Meizu MX5 прошивка смартфона Купить meizu mx5 русская прошивка" title="Meizu MX5 прошивка смартфона Купить meizu mx5 русская прошивка"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/office/meizu-mx5-proshivka-smartfona-meizu-mx5-proshivka-smartfona-kupit-meizu-mx5-russkaya.html" rel="bookmark" title="Meizu MX5 прошивка смартфона Купить meizu mx5 русская прошивка">Meizu MX5 прошивка смартфона Купить meizu mx5 русская прошивка</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-14 17:55:05</time></span> </div> <div class="td-excerpt"> Meizu на данный момент является компанией, динамично набирающей обороты на мировой арене. Все больше людей обращают внимание на интересную и относительно доступную этого китайского производителя.... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/office/ne-mogu-podklyuchitsya-k-vaifayu-s-telefona-telefon-ne-podklyuchaetsya-k-wi-fi.html" rel="bookmark" title="Телефон не подключается к Wi-Fi"><img width="150" height="150" class="entry-thumb" src="/uploads/d7c82a5116d490c9245af7e752acf795.jpg" alt="Телефон не подключается к Wi-Fi" title="Телефон не подключается к Wi-Fi"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/office/ne-mogu-podklyuchitsya-k-vaifayu-s-telefona-telefon-ne-podklyuchaetsya-k-wi-fi.html" rel="bookmark" title="Телефон не подключается к Wi-Fi">Телефон не подключается к Wi-Fi</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-13 18:13:32</time></span> </div> <div class="td-excerpt"> Всем привет! Я тут проанализировал немного комментарии, которые посетители оставляют на сайте, проверил запросы и понял, что есть очень распространенная проблема с подключением к Wi-Fi, о которой я... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/working-with-cddvd/proverka-kompyutera-na-proizvoditelnost-igr-kak-proverit.html" rel="bookmark" title="Как проверить быстродействие компьютера, чтобы узнать на что он способен"><img width="150" height="150" class="entry-thumb" src="/uploads/69d63e9ee18aef82d0fd6671d49a8820.jpg" alt="Как проверить быстродействие компьютера, чтобы узнать на что он способен" title="Как проверить быстродействие компьютера, чтобы узнать на что он способен"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/working-with-cddvd/proverka-kompyutera-na-proizvoditelnost-igr-kak-proverit.html" rel="bookmark" title="Как проверить быстродействие компьютера, чтобы узнать на что он способен">Как проверить быстродействие компьютера, чтобы узнать на что он способен</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-13 18:13:32</time></span> </div> <div class="td-excerpt"> Всем привет! Многие владельцы ПК нередко ловят себя на мысли, что их машина работает недостаточно быстро, так сказать «подвисает». В таком случае стоит протестировать своего «железного друга» и... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/multimedia/skachat-programmy-dlya-sozdaniya-tekstovyh-dokumentov-programmy-dlya-raboty-s.html" rel="bookmark" title="Программы для работы с документами офисного типа: краткий обзор"><img width="150" height="150" class="entry-thumb" src="/uploads/8cac6789198679a4304bfeb658a05010.jpg" alt="Программы для работы с документами офисного типа: краткий обзор" title="Программы для работы с документами офисного типа: краткий обзор"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/multimedia/skachat-programmy-dlya-sozdaniya-tekstovyh-dokumentov-programmy-dlya-raboty-s.html" rel="bookmark" title="Программы для работы с документами офисного типа: краткий обзор">Программы для работы с документами офисного типа: краткий обзор</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-12 18:10:29</time></span> </div> <div class="td-excerpt"> Пакеты программ для работы с текстом, электронными таблицами, презентациями и базами данных, интегрированные в единый комплекс. Сегодня большинство пользователей ПК имеют в своем распоряжении... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/images/kak-vosstanovit-fotografii-na-kompyutere-kak-vosstanovit.html" rel="bookmark" title="Как восстановить удаленные фото на смартфонах Андроид – и как"><img width="150" height="150" class="entry-thumb" src="/uploads/dd50ff7e76d4d0f6443760c511e095e6.jpg" alt="Как восстановить удаленные фото на смартфонах Андроид – и как" title="Как восстановить удаленные фото на смартфонах Андроид – и как"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/images/kak-vosstanovit-fotografii-na-kompyutere-kak-vosstanovit.html" rel="bookmark" title="Как восстановить удаленные фото на смартфонах Андроид – и как">Как восстановить удаленные фото на смартфонах Андроид – и как</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-12 18:10:29</time></span> </div> <div class="td-excerpt"> Удаленные файлы со смартфона или планшета невозможно вернуть с помощью встроенных функций гаджета. Для этих целей существуют специальные программы, но и они не гарантируют 100% успех, хотя шансы... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/working-with-cddvd/beskorystno-kopiyu-soobshcheniya-opredelenie-beskorystiya.html" rel="bookmark" title="Бескорыстно копию сообщения"><img width="150" height="150" class="entry-thumb" src="/uploads/abadb09345067018bff763bfced7a2d1.jpg" alt="Бескорыстно копию сообщения" title="Бескорыстно копию сообщения"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/working-with-cddvd/beskorystno-kopiyu-soobshcheniya-opredelenie-beskorystiya.html" rel="bookmark" title="Бескорыстно копию сообщения">Бескорыстно копию сообщения</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-11 18:05:07</time></span> </div> <div class="td-excerpt"> Здравствуйте. Сегодня я расскажу еще об одной интересной штуке, которая поможет сделать полный бэкап смс-сообщений на Вашем смартфоне или планшете. Скажу сразу, что данное пособие по бэкапу... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/images/dron-s-kameroi-xiaomi-kvadrokopter-xiaomi-mi-drone-nedorogoi-bilet-v-mir-bpla.html" rel="bookmark" title="Квадрокоптер xiaomi mi drone"><img width="150" height="150" class="entry-thumb" src="/uploads/a6430579b0ca4eec32a74338da67e689.jpg" alt="Квадрокоптер xiaomi mi drone" title="Квадрокоптер xiaomi mi drone"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/images/dron-s-kameroi-xiaomi-kvadrokopter-xiaomi-mi-drone-nedorogoi-bilet-v-mir-bpla.html" rel="bookmark" title="Квадрокоптер xiaomi mi drone">Квадрокоптер xiaomi mi drone</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-10 17:57:31</time></span> </div> <div class="td-excerpt"> Компания Xiaomi успела зарекомендовать себя как производителя одних из наиболее производительных и функциональных смартфонов на рынке по доступной цене. Прочно заняв свою нишу, компания не так... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/internet/vash-uroven-vyshe-pokupatelei-aliexpress-novye-privilegii-na-aliexpress.html" rel="bookmark" title="Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?"><img width="150" height="150" class="entry-thumb" src="/uploads/1a3280b04d4efceb6941943ecfc0901a.jpg" alt="Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?" title="Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/internet/vash-uroven-vyshe-pokupatelei-aliexpress-novye-privilegii-na-aliexpress.html" rel="bookmark" title="Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?">Новые привилегии на AliExpress или что такое уровневая система А0-А1-А2-А3-А4?</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-10 17:57:31</time></span> </div> <div class="td-excerpt"> Уже довольно давно на Алиэкспресс действует система рейтингов покупателей. Она работает иначе, нежели у продавцов. Если у последних по рейтингу можно судить о надежности, то у покупателей он дает... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/multimedia/chto-takoe-rasshirenie-faila-esp-rasshirenie-faila-esp-rasshirenie.html" rel="bookmark" title="Расширение файла ESP Расширение esp"><img width="150" height="150" class="entry-thumb" src="/uploads/032ff1fbb6557a9e1131b70664782582.jpg" alt="Расширение файла ESP Расширение esp" title="Расширение файла ESP Расширение esp"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/multimedia/chto-takoe-rasshirenie-faila-esp-rasshirenie-faila-esp-rasshirenie.html" rel="bookmark" title="Расширение файла ESP Расширение esp">Расширение файла ESP Расширение esp</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-10 17:57:31</time></span> </div> <div class="td-excerpt"> То на вашем компьютере могут присутствовать файлы формата ESP. Но вот открыть их или редактировать будет не так-то просто. Важно сначала понять, для чего они и какую функцию выполняют.Файл с... </div> </div> </div> <div class="td_module_16 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/system/ps-vita-ili-ps-vita-slim-otlichiya-modelei-sravnenie-harakteristik-chto-vybrat.html" rel="bookmark" title="PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик"><img width="150" height="150" class="entry-thumb" src="/uploads/b3632864cb32954a042a31e5213e12e1.jpg" alt="PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик" title="PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/system/ps-vita-ili-ps-vita-slim-otlichiya-modelei-sravnenie-harakteristik-chto-vybrat.html" rel="bookmark" title="PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик">PS Vita или PS Vita Slim: отличия моделей, сравнение характеристик</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-09 17:53:19</time></span> </div> <div class="td-excerpt"> PS Vita, а точнее первая ее версия, вышла достаточно давно – в конце 2011 у японцев, которым на это везет всегда больше и в начале 2012-го в Америке и Европе. Vita стала заменой морально устаревшей... </div> </div> </div> </div> </div> <div class="td-a-rec td-a-rec-id-custom_ad_2 "> <center> </center> </div> </div> </div> </div> </div> </div> </article> <div class="td-footer-wrapper td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span12"> </div> </div> <div class="td-pb-row"> <div class="td-pb-span4"> <div class="td_block_wrap td_block_7 td_uid_48_5a560ac7f2e90_rand td-pb-border-top td_block_template_5 td-column-1 td_block_padding" data-td-block-uid="td_uid_48_5a560ac7f2e90" ><script>var block_td_uid_48_5a560ac7f2e90 = new tdBlock(); block_td_uid_48_5a560ac7f2e90.id = "td_uid_48_5a560ac7f2e90"; block_td_uid_48_5a560ac7f2e90.atts = '{ "limit":3,"sort":"featured","post_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","category_id":"","category_ids":"","custom_title":"\u0412\u042b\u0411\u041e\u0420 \u0420\u0415\u0414\u0410\u041a\u0422\u041e\u0420\u0410","custom_url":"","show_child_cat":"","sub_cat_ajax":"","ajax_pagination":"","header_color":"","header_text_color":"","ajax_pagination_infinite_stop":"","td_column_number":1,"td_ajax_preloading":"","td_ajax_filter_type":"","td_ajax_filter_ids":"","td_filter_default_txt":"\u0412\u0441\u0435","color_preset":"","border_top":"","class":"td_uid_48_5a560ac7f2e90_rand","el_class":"","offset":"","css":"","tdc_css":"","tdc_css_class":"td_uid_48_5a560ac7f2e90_rand","live_filter":"","live_filter_cur_post_id":"","live_filter_cur_post_author":"","block_template_id":""} '; block_td_uid_48_5a560ac7f2e90.td_column_number = "1"; block_td_uid_48_5a560ac7f2e90.block_type = "td_block_7"; block_td_uid_48_5a560ac7f2e90.post_count = "3"; block_td_uid_48_5a560ac7f2e90.found_posts = "10611"; block_td_uid_48_5a560ac7f2e90.header_color = ""; block_td_uid_48_5a560ac7f2e90.ajax_pagination_infinite_stop = ""; block_td_uid_48_5a560ac7f2e90.max_num_pages = "3537"; tdBlocksArray.push(block_td_uid_48_5a560ac7f2e90); </script><div class="td-block-title-wrap"><h4 class="td-block-title"><span class="td-pulldown-size">ВЫБОР РЕДАКТОРА</span></h4></div><div id=td_uid_48_5a560ac7f2e90 class="td_block_inner"> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/internet/instrukciya-dlya-prilozheniya-mi-fit-na-russkom-yazyke-nastroika-mi-band.html" rel="bookmark" title="Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band"><img width="100" height="70" class="entry-thumb" src="/uploads/802b9e54c1dd538c0808fc86ef4d7d8e.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band" title="Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/internet/instrukciya-dlya-prilozheniya-mi-fit-na-russkom-yazyke-nastroika-mi-band.html" rel="bookmark" title="Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band">Настройка Mi Band – подробное описание приложения Mi Fit Инструкция по эксплуатации xiaomi mi band</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-09 17:53:19</time></span> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/working-with-cddvd/chem-konkretno-otlichaetsya-makbuk-ot-noutbuka-sovremennyi-makbuk-chto-eto-takoe.html" rel="bookmark" title="Современный МакБук: что это такое?"><img width="100" height="70" class="entry-thumb" src="/uploads/e0221d7fdc5a5fb2a9e76c4cfd397b4c.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Современный МакБук: что это такое?" title="Современный МакБук: что это такое?"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/working-with-cddvd/chem-konkretno-otlichaetsya-makbuk-ot-noutbuka-sovremennyi-makbuk-chto-eto-takoe.html" rel="bookmark" title="Современный МакБук: что это такое?">Современный МакБук: что это такое?</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-09 17:53:19</time></span> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/office/kak-otkryt-fx-fail-chto-takoe-rasshirenie-faila-fx-ustanovlena-nepravilnaya.html" rel="bookmark" title="Что такое расширение файла FX?"><img width="100" height="70" class="entry-thumb" src="/uploads/df6e99cfbd8ce5a9e3ef1c734e6814f9.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Что такое расширение файла FX?" title="Что такое расширение файла FX?"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/office/kak-otkryt-fx-fail-chto-takoe-rasshirenie-faila-fx-ustanovlena-nepravilnaya.html" rel="bookmark" title="Что такое расширение файла FX?">Что такое расширение файла FX?</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-08 18:26:45</time></span> </div> </div> </div> </div> </div></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_7 td_uid_49_5a560ac8069d3_rand td-pb-border-top td_block_template_5 td-column-1 td_block_padding" data-td-block-uid="td_uid_49_5a560ac8069d3" ><script>var block_td_uid_49_5a560ac8069d3 = new tdBlock(); block_td_uid_49_5a560ac8069d3.id = "td_uid_49_5a560ac8069d3"; block_td_uid_49_5a560ac8069d3.atts = '{ "limit":3,"sort":"popular","post_ids":"","tag_slug":"","autors_id":"","installed_post_types":"","category_id":"","category_ids":"","custom_title":"\u041f\u041e\u041f\u0423\u041b\u042f\u0420\u041d\u042b\u0415 \u0421\u041e\u041e\u0411\u0429\u0415\u041d\u0418\u042f","custom_url":"","show_child_cat":"","sub_cat_ajax":"","ajax_pagination":"","header_color":"","header_text_color":"","ajax_pagination_infinite_stop":"","td_column_number":1,"td_ajax_preloading":"","td_ajax_filter_type":"","td_ajax_filter_ids":"","td_filter_default_txt":"\u0412\u0441\u0435","color_preset":"","border_top":"","class":"td_uid_49_5a560ac8069d3_rand","el_class":"","offset":"","css":"","tdc_css":"","tdc_css_class":"td_uid_49_5a560ac8069d3_rand","live_filter":"","live_filter_cur_post_id":"","live_filter_cur_post_author":"","block_template_id":""} '; block_td_uid_49_5a560ac8069d3.td_column_number = "1"; block_td_uid_49_5a560ac8069d3.block_type = "td_block_7"; block_td_uid_49_5a560ac8069d3.post_count = "3"; block_td_uid_49_5a560ac8069d3.found_posts = "10611"; block_td_uid_49_5a560ac8069d3.header_color = ""; block_td_uid_49_5a560ac8069d3.ajax_pagination_infinite_stop = ""; block_td_uid_49_5a560ac8069d3.max_num_pages = "3537"; tdBlocksArray.push(block_td_uid_49_5a560ac8069d3); </script><div class="td-block-title-wrap"><h4 class="td-block-title"><span class="td-pulldown-size">ПОПУЛЯРНЫЕ МАТЕРИАЛЫ</span></h4></div><div id=td_uid_49_5a560ac8069d3 class="td_block_inner"> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/multimedia/kak-sdelat-blok-pitaniya-reguliruemyi-blok-pitaniya-svoimi-rukami.html" rel="bookmark" title="Регулируемый блок питания своими руками Простой блок с регулировкой"><img width="100" height="70" class="entry-thumb" src="/uploads/e069f1b39075eee6a737aac62bee0314.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Регулируемый блок питания своими руками Простой блок с регулировкой" title="Регулируемый блок питания своими руками Простой блок с регулировкой"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/multimedia/kak-sdelat-blok-pitaniya-reguliruemyi-blok-pitaniya-svoimi-rukami.html" rel="bookmark" title="Регулируемый блок питания своими руками Простой блок с регулировкой">Регулируемый блок питания своими руками Простой блок с регулировкой</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-08 18:26:45</time></span> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/system/kak-udalit-istoriyu-v-mozile-poshagovaya-instrukciya-kak-ochistit-istoriyu.html" rel="bookmark" title="Как удалить историю в мозиле"><img width="100" height="70" class="entry-thumb" src="/uploads/9324c3b17cbbbbf2dc2c4e534e68718b.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Как удалить историю в мозиле" title="Как удалить историю в мозиле"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/system/kak-udalit-istoriyu-v-mozile-poshagovaya-instrukciya-kak-ochistit-istoriyu.html" rel="bookmark" title="Как удалить историю в мозиле">Как удалить историю в мозиле</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-08 18:26:45</time></span> </div> </div> </div> </div> <div class="td-block-span12"> <div class="td_module_6 td_module_wrap td-animation-stack"> <div class="td-module-thumb"><a href="/security/chem-udoben-sposob-peredachi-informacii-pochtovyi-golub-golubinaya-pochta.html" rel="bookmark" title="Чем удобен способ передачи информации почтовый голубь"><img width="100" height="70" class="entry-thumb" src="/uploads/c918842dc30f930c4965d8080bcd214d.jpg" sizes="(max-width: 100px) 100vw, 100px" alt="Чем удобен способ передачи информации почтовый голубь" title="Чем удобен способ передачи информации почтовый голубь"/ loading=lazy></a></div> <div class="item-details"> <h3 class="entry-title td-module-title"><a href="/security/chem-udoben-sposob-peredachi-informacii-pochtovyi-golub-golubinaya-pochta.html" rel="bookmark" title="Чем удобен способ передачи информации почтовый голубь">Чем удобен способ передачи информации почтовый голубь</a></h3> <div class="td-module-meta-info"> <span class="td-post-date"><time class="entry-date updated td-module-date" datetime="" >2024-04-07 17:43:36</time></span> </div> </div> </div> </div> </div></div> </div> <div class="td-pb-span4"> <div class="td_block_wrap td_block_popular_categories td_uid_50_5a560ac820ded_rand widget widget_categories td-pb-border-top td_block_template_5" data-td-block-uid="td_uid_50_5a560ac820ded" ><h4 class="td-block-title"><span class="td-pulldown-size">КАТЕГОРИИ</span></h4><ul class="td-pb-padding-side"> <li><a href="/category/system/">Система</a></li> <li><a href="/category/internet/">Интернет</a></li> <li><a href="/category/security/">Безопасность</a></li> <li><a href="/category/office/">Офисные</a></li> <li><a href="/category/to-the-developer/">Разработчику</a></li> <li><a href="/category/programs/">Программы</a></li> <li><a href="/category/images/">Изображения</a></li> <li><a href="/category/multimedia/">Мультимедия</a></li> </ul></div> </div> </div> </div> <div class="td-footer-bottom-full"> </div> </div> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container"> <div class="td-pb-row"> <div class="td-pb-span td-sub-footer-menu"> </div> <div class="td-pb-span td-sub-footer-copy"> © Copyright 2024 Система. Безопасность. Интернет. Программы. Полезные советы. <a href="/feedback.html">Контакты с администратором сайта</a> </div> </div> </div> </div> </div> <script type='text/javascript' src='https://nyfy.ru/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.9.2'></script> <script type='text/javascript' src='https://nyfy.ru/wp-content/themes/Newspaper/js/tagdiv_theme.js?ver=7.8.1'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.9.1'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script async="async" type='text/javascript' src='https://nyfy.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0.1'></script> <script> // if the theme has tdBackstr support, it means this already uses it if ('undefined' !== typeof window.tdBackstr) { (function() { // the site background td-backstretch jquery object is dynamically added in DOM, and after any translation effects are applied over td-backstretch var wrapper_image_jquery_obj = jQuery('<div class=\'backstretch\'></div>'); var image_jquery_obj = jQuery('<img class=\'td-backstretch not-parallax\' src=\'/wp-content/uploads/2017/08/полнолуние-2.jpg\' loading=lazy>'); wrapper_image_jquery_obj.append(image_jquery_obj); jQuery('body').prepend(wrapper_image_jquery_obj); var td_backstr_item = new tdBackstr.item(); td_backstr_item.wrapper_image_jquery_obj = wrapper_image_jquery_obj; td_backstr_item.image_jquery_obj = image_jquery_obj; tdBackstr.add_item(td_backstr_item); })(); } (function() { var html_jquery_obj = jQuery('html'); if (html_jquery_obj.length && (html_jquery_obj.is('.ie8') || html_jquery_obj.is('.ie9'))) { var path = '/wp-content/themes/Newspaper/style.css'; jQuery.get(path, function(data) { var str_split_separator = '#td_css_split_separator'; var arr_splits = data.split(str_split_separator); var arr_length = arr_splits.length; if (arr_length > 1) { var dir_path = '/wp-content/themes/Newspaper'; var splited_css = ''; for (var i = 0; i < arr_length; i++) { if (i > 0) { arr_splits[i] = str_split_separator + ' ' + arr_splits[i]; } //jQuery('head').append('<style>' + arr_splits[i] + '</style>'); var formated_str = arr_splits[i].replace(/\surl\(\'(?!data\:)/gi, function regex_function(str) { return ' url(\'' + dir_path + '/' + str.replace(/url\(\'/gi, '').replace(/^\s+|\s+$/gm, ''); }); splited_css += "<style>" + formated_str + "</style>"; } var td_theme_css = jQuery('link#td-theme-css'); if (td_theme_css.length) { td_theme_css.after(splited_css); } } }); } })(); </script> </body> </html>