direct.php
<?php if($_GET['url'])
{
$url = base64_decode($_GET['url']);
if (!$url)
{
$url = "https://вашдомен.ру";
}
if (!preg_match('#(https?|ftp)://\S+[^\s.,>)\];\'\"!?]#i',$url))
{
exit ("<p>Неверный формат запроса! Проверьте URL!</p>");
}
header("Location:$url");
exit();
} ?>
<?php
$mytext=preg_replace('~(<a(?>.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?site\.ru).*?)\2~eSi', '"\1=\"https://site.ru/direct.php?url=".base64_encode("$3")."\" target=\"_blank\"";', $mytext);?>
site.ru и вашдомен.ру- заменить на свой домен
base64.
avia-avia._ruна главной есть ссылки на поддомен (внешняя) такого типа
https://bilety.avia-avia._ru/searches/new?origin_i...
<?php
if($_GET['url']){
$url = base64_decode($_GET['url']);
var_dump($_GET);
if (!$url){
$url = "https://вашдомен.ру";
}
var_dump($url);
if (!preg_match('#(https?|ftp)://\S+[^\s.,>)\];\'\"!?]#i',$url)){
exit ("<p>Неверный формат запроса! Проверьте URL!</p>");
}
//header("Location:$url");
exit();
} ?>
https://bilety.avia-avia.ru/searches/new?origin_iata=MOW&destination_iata=ARH&depart_date=2023-12-14&return_date=2023-12-17&adults=1&children=0&infants=0&trip_class=0&marker=87111&with_request=true
хоть что-то похожее на код Base64? Суть такова что заменитель, подставляет в переменную внутреннего адреса внешний адрес, и дополнительно кодирует её в
$mytext=preg_replace(
'~(<a(?>.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?site\.ru).*?)\2~eSi',
'"\1=\"https://site.ru/direct.php?url=".base64_encode("$3")."\" target=\"_blank\"";', /*
очевидно что внутри этой строки base64_encode() работать не будет,
так как даже по подсветке кода видно, что строка там не конкатенируется,
а именно просто часть строки. Достаточно просто соблюсти правила разметки
кода, и немного внимательнее глянуть на код. Да и сама регулярка выглядит сомнительно...*/
$mytext
);?>
Вы вообще проверяли вашу регулярку? Как минимум два неэкранированных // точно мимо и ++ явно излишние... и вообще, зачем вы там ищете а хреф как часть паттерна? Вам же тупо нужно заменить один урл другим? не direct.php, а engine.php в коде ошибка здесь на сайте engine.php стоит. Проверял даже сейчас не работает.Что? Ничего не понятно... Кто куда и зачем стоит...
сайт рухнул из-за обновления алгоритма Яндекса где стало учитываться кол-во внешних ссылок со страницы сайта. Поэтому обратился сюда.Я про это вообще не спрашивал.
https://bilety.avia-avia.ru/searches/new?origin_ia...
Вы можете помочь подправить код?могу конечно. Хотя непонятно зачем было обращаться сюда, если вы не разбираетесь в коде вообще? Так то все необходимые для исправления ошибки я вам уже нашел, чините и вперед... Если вы ищете готовое решение, логичнее было бы обратиться на фриланс, а не нарушать правила данного ресурса (п. 5.12)
мне нужно, чтобы ссылки вида...Я уже догадался, хотя описание задачи так себе...
<a href="https://bilety.avia-avia.ru/direct.php?url=<?=$base64URL?>" target="_blank">
Знаете, а Вы правы, не стоило мне беспокоить профессионалов. С уважением.Правила ресурса требуют от вас постановки задачи в форме "что не так" и ожидания ответа в форме "делай это и это", а не готовый код, что четко прописано в правилах. Профессионалы тут поддерживают знаниями (цитата) "сервис вопросов и ответов, предназначенный для IT-специалистов и всех тех, кто отчаянно пытается ими стать.". Если вы не относитесь ни к первым, ни ко вторым, то какой смысл искать разъяснения по коду, который вы не хотите исправлять, желая лишь получить готовое решение?
Я не нашел в правилах, того, о чем Вы пишите.
5.12. Задачи и задания. В отличие от вопроса, задача и задание представляют собой частную проблемную ситуацию с явно заданной целью, которую необходимо достичь. Пользу от достижения этой цели получает, как правило, лишь её автор. И даже автору решение задачи или задания будет полезно лишь кратковременно (до тех пор, пока он не использует полученное решение).Именно по этому я не пишу готовый код, а даю вам максимально четкое описание алгоритма решения, прям только переложить фразы в код. Возможно у вас есть какие-то конкретные вопросы, из-за которых вы не можете что-то сделать самостоятельно? Задавайте, и я расскажу как сделать.
<?php if($_GET['url'])
{
$url = base64_decode($_GET['url']);
if (!$url)
{
$url = "https://avia-avia.ru";
}
if (!preg_match('#(https?|ftp)://\S+[^\s.,>)\];\'\"!?]#i',$url))
{
exit ("<p>Неверный формат запроса! Проверьте URL!</p>");
}
header("Location:$url");
$mytext=preg_match("/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/", "\1=\"https://avia-avia.ru/?url=<?=$base64URL?>\" target=\"_blank\"", $mytext);
exit();
} ?>
<a href="https://b.avia-avia.ru/lin">Ссылка</a>
$mytext=preg_replace(...))
, добейтесь появления в ссылке строки "url=......". А уже после этого копайтесь в коде, принимающем и расшифровывающем ваш base64, который вы сейчас и привели. не получаетсяПриведенный код во первых тоже имеет неэкранированные слэши в регулярке, во вторых речь шла о том что у вас помечено "на главной" -
$mytext=preg_replace('...
, который ничего не выдает, так как 1) регулярка неверная, 2) вам нужен только урл, а вы тянете зачем то весь хтмл тег, 3) не надо там что-то менять пока, для начала добейтесь чтобы "на главной" в $mytext попадал урл, после этого код можно будет достаточно просто поправить.<a href="some_url">
пытаетесь получить другую строку<a href="other_url">
, хотя она вам не нужна.