Я нахожусь в процессе миграции многих сайтов со старой конфигурации сервера на новую. Каждый сайт основан на похожей (но, к сожалению, не идентичной) кодовой базе с использованием URL-адресов mod_rewrite.
- Ubuntu 8.04 LTS => Ubuntu 12.04 LTS
- Apache 2.22.8 => Apache 2.2.22
- PHP 5.2 (FastCGI) => PHP 5.3 (PHP5-FPM)
В основном работает как шарм, но в новой конфигурации $ _SERVER ['REDIRECT_URL'] больше не устанавливается, и код не выполняется из-за зависимости от этой глобальной переменной.
Насколько я понимаю, эта переменная устанавливается Apache, когда происходит перенаправление. Очевидно, сейчас этого не происходит, но я изо всех сил пытаюсь найти причину.
- Это обновление Apache или (по-моему) переход с PHP FastCGI на PHP5-FPM?
- Как мне вернуть эту переменную?
Я бы действительно не хотел редактировать код на каждом сайте, поэтому при необходимости я установлю глобальный PHP auto_prepend для PHP, но в идеале я бы хотел исправить конфигурацию сервера и иметь этот набор в первую очередь.
Потенциально связаны: теперь у меня также есть пара новых переменных $ _SERVER, а именно REDIRECT_SCRIPT_URL и REDIRECT_REDIRECT_SCRIPT_URL. Кажется, они содержат правильные данные, которые я хочу для REDIRECT_URL, но также указывают на то, что произошли два внутренних перенаправления, которых раньше не было - Google ищет REDIRECT_REDIRECT_SCRIPT_URL, возвращает только случайные выходные данные var_dump. Является ли SCRIPT_URL новым REDIRECT_URL?
Редактировать 1
Повторная проверка REDIRECT_URL (сейчас) установлена, но всегда в «index.php» (цель mod_rewrite) вместо ожидаемого набранного URL. Я прибегнул к использованию PHP auto_prepend_file, чтобы вручную установить необходимую переменную.
Я не уверен, как я пропустил это в первый раз, но я тем временем внес несколько изменений, поэтому я полагаю, что есть шанс, что его там не было. Извинения, если это вводит в заблуждение кого-либо.
Редактировать 2
Чтобы учесть упоминания ErrorDocument ниже, используется правило mod_rewrite:
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Переменная $ _GET ['url'] установлена, поэтому правило должно работать.
Чтобы было ясно, на этом этапе я использовал обходной путь auto_prepend_file, который я упомянул изначально.
источник
Ответы:
REDIRECT_URL устанавливается только веб-сервером Apache и только при определенных обстоятельствах . Вероятно, это не то, на что должен опираться ваш код. Насколько я могу судить, лучшим решением было бы исправить ошибочный код PHP; Вы не можете заставить это быть всегда установленным в Apache.
источник
Согласно документации PHP:
Таким образом, может показаться, что не все
$_SERVER
суперглобальные переменные настолько независимы от платформы, как можно было бы ожидать.$_SERVER['REQUEST_URI']
Кажется, это одно из таких значений, которое последовательно определяется всеми основными веб-серверами, поэтому вы можете попробовать использовать его вместо этого.источник
Для отсутствующих изображений в одном из наших проектов, которые были перенаправлены в index.php, я просто использовал это исправление:
url: http://www.domanXY.de/image.php?file=var/binaries/store/8dfaadde-5309-4a35-8f9a-d8b9cd807aae.jpg&options=&options=resize_outer(320,150);sharpen(64) ;
Если вам нужно глобальное решение, я думаю, что вы должны использовать explode () и т. Д. И использовать другую переменную, такую как $ _SERVER ['REQUEST_URI'].
источник
Вы можете установить php auto-prepend-file для включения небольшого фрагмента PHP-кода, который устанавливает эту переменную.
источник