Полагаю, что я выполнил инструкции при обновлении Drupal (7.33 -> 7.39), но сумел сломать его.
Установка: Сайт Drupal находится за обратный прокси-сервер:
<Location /app>
ProxyPass http://back.example.com/drupal
ProxyPassReverse http://back.example.com/drupal
ProxyPassReverseCookiePath /drupal /app
</Location>
И в sites/default/settings.php
, есть этот бит:
$conf['reverse_proxy_header'] = 'HTTP_X_FORWARDED_FOR';
if (!empty($_SERVER[$conf['reverse_proxy_header']])) {
$base_url = 'http://front.example.com/app';
}
Проблема: В то время как некоторые формы, кажется, работают, генерируя правильный action
атрибут (<form action="/app/..." ...>
), большинство (особенно, все в области администратора) игнорируют $base_url
, генерируя <form action="/drupal/..." ...>
, поэтому представить явно не удается.
Я посмотрел на источник, но я не могу понять, как это работает, в первую очередь, потому что, насколько я могу видеть, action
генерируется из drupal_build_form
, который считывает данные действия с element_info('form')
, который заполнен system_element_info
, который, в свою очередь, звонит request_uri()
- и ничего не найдено в request_uri()
около $base_url
.
Я попытался очистить кеши с drush
на всякий случай, когда я что-то упустил в базе данных, и это не помогло.
EDIT: Кажется, что большинство ссылок вызывает функцию url($path)
, что делает правильную вещь. Но он не вызывается для атрибута формы action
, за исключением формы, которая визуализируется из плагина (и который, похоже, не использует element_info
, но вызывает url
для построения своего action
).
EDIT2: Если было не ясно, $base_url
имеет правильное значение; он просто не применяется (и я не вижу, где он будет применяться).
Спасибо, это было пропатчить вопрос, так что, по крайней мере, сайт можно использовать. Он по-прежнему ведет себя странно - например, формы имеют «target =» _ new », но это гораздо менее важно. Тем не менее, большой вопрос, который у меня есть, - как, черт возьми, он работал в первую очередь, до обновления?!? (Я поддерживал старый код, и это эквивалентно. Я вернул его на Apache, и он не работает.) В любом случае, я буду принимать этот ответ в предварительном порядке, если кто-то не сможет объяснить причину этого. – Amadan