Форум PHPBB — внешние ссылки во внутренние
posted in Полезности, Программирование |Достался мне проектик, целью которого заказчик поставил мне монетизацию ресурса.
Более всего страниц досталось на форум (сапа увидела в районе 3к).
Собственно первоочередной задачей я обозначил — преобразование всех существующих внешних ссылок во внутренние (для чего — думаю понятно).
Сразу к реализации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// в viewtopic.php добавляем 2 функции (можно объединить в одну, но я не стал заморачиваться) function href2int($buf) { //преобразуем внешние ссылки во внутренние if (preg_match_all('#href\s*=\s*["|\']?(http://.*?)["|\'|\s|>]#si', $buf, $matches)) { $links = $matches[1]; foreach ($links as $lnk) { if (stristr($lnk,'sitename')) continue; $search[]= $lnk; $replace[]='http://www.sitename.ru/go/'.substr($lnk,7); } $buf = str_replace($search, $replace, $buf); }; return($buf); } function http2int($buf) { //преобразуем внешние ссылки во внутренние if (preg_match_all('#["|\']?(http://.*?)["|\'|\s|>]#si', $buf, $matches)) { $links = $matches[1]; foreach ($links as $lnk) { if (stristr($lnk,'sitename')) continue; $search[]= $lnk; $replace[]='http://www.sitename.ru/go/'.substr($lnk,7); } $buf = str_replace($search, $replace, $buf); }; return($buf); } // перед строчкой $template->assign_block_vars('postrow', array( ... добавляем $www = http2int($www); $www_img = href2int($www_img); $user_sig = http2int($user_sig); $message = href2int($message); |
всё — на выходе уже преобразованные ссылки
сам механизм преобразования (один из многих рабочих вариантов):
делаем в корне сайта файлик go.php выполняющий редирект
1 |
и командами веб сервера делаем редирект следующей логики
«если урл содержит /go/ тогда перекидываем его на go.php»
на NGINX это будет строчка
1 |
rewrite ^/go/(.*?) /go.php?to=$1 last; |
P.S. (добавил спустя некоторое время)
Сам себя покритикую за подобное решение — зачем поднимать PHP для редиректа, когда сам NGINX это элементарно может сделать ?
1 |
rewrite ^/go/(.*?) http://$1 permanent; |
Правда, почему то, NGINX неверно редиректит ссылки содержащие решетку (обнаружил в IE 6.0) — отписал на NGINX рассылку — решение пока не найдено.