PHP header() после вывода

12
samimages
На сайте с 31.05.2009
Offline
427
#11

danforth, спасибо!

Однако я не случайно дал формулировку:

PHP header() после вывода

т.к. все что можно было не сделать заранее - я не сделал :D

Реальная ситуация на самом деле вообще не стандартная.

Представьте ситуацию когда на любой цмс

(мы не будем трогать особенности это не важно)

есть страница: http://domen.ru/index.php?bla=bla&bla=bla&page=id_page

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

http://domen.ru/index.php?bla=bla&bla=bla&page=id_page - становится корневым для n-subpage

выше этого уровня мы подняться не можем (по условию задачи), но у нас есть вероятность, что $_GET['subpage'] - будет не верным для обработчика id_page, который вызывает контент.

Юзабилити обрабатывается явой без вопросов, а вот с роботами... швах.

Так что пока буферизация, а там только саму систему править, но это не столь интересно, как решить поставленную задачу.

Опыт как иммунитет — приобретается в муках! Хостинг: экономия до 1300 руб + домен в подарок ( https://clck.ru/XLscf ) / Аудит семантики от 15К [долго] - ЛС
totamon
На сайте с 12.05.2007
Offline
437
#12
samimages:
выше этого уровня мы подняться не можем (по условию задачи), но у нас есть вероятность, что $_GET['subpage'] - будет не верным для обработчика id_page, который вызывает контент.

что за уровни? нет никаких уровней, есть набор переменных который нужно обработать... добавилось условие задачи - добавьте условие в обработку переменных...

samimages:
Так что пока буферизация, а там только саму систему править

а добавить буферизацию - это "не править" систему?))

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
L
На сайте с 07.12.2007
Offline
351
#13
samimages:
Реальная ситуация на самом деле вообще не стандартная.

Представьте ситуацию когда на любой цмс
(мы не будем трогать особенности это не важно)

Ситуация - стандартная. CMS Wordpress буферизует весь вывод(по ob_start()), поэтому автоматически собирает headers() с любого места любых скриптов, которые его выдали. Главное - не накосячить с вложенностью этих ob_start() друг в друга.

Без редиректа можно заюзать rel='canonical', хотя его тоже надо успеть запихнуть в секцию <head>.

Есть некошерный вариант редиректа:

<meta http-equiv='refresh' content='1; url=http://site.ru/new_page.html'>

В браузерах он срабатывает вообще с ЛЮБОГО места страницы, даже если его разместить после </html>.

При небольших задержках Яндекс считает его временным редиректом, аналогичным серверным редиректам с HTTP-кодом 302/303/307.

Но, боюсь бот-индексатор Яндекса будет искать его регуляркой в секции <head>, так что такой вариант редиректа не везде подойдёт.

samimages
На сайте с 31.05.2009
Offline
427
#14
totamon:
что за уровни? нет никаких уровней, есть набор переменных который нужно обработать... добавилось условие задачи - добавьте условие в обработку переменных...

Это понятно. Но, по условию, задачи мы не можем ничего добавить.

ну т.е. можем конечно, но не будем, т.к. это пораженческая линия)))

totamon:
а добавить буферизацию - это "не править" систему?))

Надеюсь что нет, буду пробовать, если будут баги - значит тоже не пройдет в контексте данной ветки.

Ladycharm:
Без редиректа можно заюзать rel='canonical'

По нему сеошник во мне сопротивляется - думал об этом.

Ladycharm:
Есть некошерный вариант редиректа:
<meta http-equiv='refresh' content='1; url=http://site.ru/new_page.html'>
В браузерах он срабатывает вообще с ЛЮБОГО места страницы, даже если его разместить после </html>.

При небольших задержках Яндекс считает его временным редиректом, аналогичным серверным редиректам с HTTP-кодом 302/303/307.
Но, боюсь бот-индексатор Яндекса будет искать его регуляркой в секции <head>, так что такой вариант редиректа не везде подойдёт.

А вот это вариант, т.к. в html-ный head я могу попасть из этой точки. Спасибо!

L
На сайте с 07.12.2007
Offline
351
#15

samimages, ещё можно менять document.location href на яваскрипте (в дополнение к <meta refresh).

Когда-то это был единственный способ сделать Redirect с сайтов на narod.ru. Яндекс понимал его и переклеивал сайт с Народа на домен 2-го уровня.

Как отнесётся Google - не знаю, но точно знаю, что индексирующие роботы Google исполняют все яваскрипты на странице. Такое ощущение, что эти роботы вообще заходят полноценным браузером Хром.

У Яндекса яваскрипты исполняет только YandexMobileBot/3.0, который приходит с юзерагентом:

Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4 (compatible; YandexMobileBot/3.0; +http://yandex.com/bots)
samimages
На сайте с 31.05.2009
Offline
427
#16
Ladycharm:
document.location href

Ну этой штукой я юзеров пересылаю из этого места в случае кривого адреса. Но она уходит по 200-му конечно.

samimages
На сайте с 31.05.2009
Offline
427
#17

"Закрою тему"

Всем отписавшимся спасибо!🍻

Ни одно из предложенных решений не было лишним и так или иначе пригодится!

LEOnidUKG, отдельный поклон :)

Пока остановился на этом варианте:


<?php
ob_start();

//далее подключается система, много чего происходит и т.д. и т.п.

ob_flush(); //Покурил мануал, решил добавить.
?>

Все работает... вроде как, поживем увидим. Сомнения вызваны скорее особенностью конкретной ситуации, т.к. сайт - лютый самопис, причем наполненный чуть более чем полностью программными модулями, т.е. не контентом в прямом смысле слова (статьи там и т.п.), так что я пока не понимаю что и где может глюкануть.

Сам думаю, что все должно быть нормально, т.к. вывод все равно статичен для каждого конкретного запроса и по идее нет особенной разницы как он собирается на сервере. Каких-то подводных камней при таком использовании буферизации я не увидел... вот кабы я к ней обращался, но тьфу тьфу тьфу :D

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий