Как CMS может понять, какую страницу от него требуют, не пользуясь суперглобальными переменными?

У меня есть некая самописная CMS на PHP, тщательно обфусцированная неведомым мне разработчиком. Я хочу сделать для нее ЧПУ через собственный скрипт. Все запросы к страницам обрабатываются CMS-кой через единый index.php — так что я просто подинклудю скрипт туда и буду переобрабатывать им запросы.


Механизм работы замышляется таков: мой скрипт, располагая правилом преобразования ЧПУ, первым получает текущий урл запроса из $_SERVER['REQUEST_URI'], определяет, новое ЧПУ ли это, и если это новое ЧПУ, то достает из базы старый адрес и скармливает ее CMS, заменяя в соответствии с ним данные, которыми CMS руководствуется при генерации страницы.


Но каким образом CMS может «догадываться» о том, какой именно урл она обрабатывает? Понятно, через суперглобальные переменные: $_SERVER, $_GET, $_REQUEST и так далее. Просмотрев содержимое этих массивов и заменив значения всем элементам, в которых содержалось похожее на текущий урл значение, я ничего не достиг — при обработке понятного CMS старого адреса, даже если испортить все вкрапления урла в значениях суперглобальных переменных, CMS все равно догадывается, какую страницу надо отдать; при обработке же нового урла, в котором переменные заменены на соответствующие старому, CMS возмущенно отдает 404.


Поэтому — вопрос. Как CMS может понять, какую страницу от него требуют, не пользуясь данными от суперглобальных массивов окружения PHP?
  • Вопрос задан
  • 4291 просмотр
Решения вопроса 1
@edogs
php.net/getenv
$_SERVER['REQUEST_URI']='bbb';
echo getenv('REQUEST_URI');

Выведет НЕ bbb, а реальный урл.
Раньше очень модно было использовать именно getenv в цмс-ках.

И соответственно почитайте про putenv, внимательно (по умолчанию не все переменные можно менять).

p.s.: А так же php.net/apache_getenv и так далее по смыслу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Suvitruf
@Suvitruf
Java/node.js/game-dev
Не могу представить иначе, чем через глобальные массивы.
А в .htaccess что?
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Проверьте, в каком состоянии register_globals.
Ответ написан
Комментировать
fenric
@fenric
Смените CMS...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы