[英]$base_url problems in forms after upgrading Drupal
我相信我在升級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/..." ...>
)時,大多數(尤其是Admin區域中的所有內容)都忽略了$base_url
,生成了<form action="/drupal/..." ...>
,所以提交顯然失敗了。
我查看了源代碼,但一開始我不知道它是如何工作的,因為據我drupal_build_form
, action
是從drupal_build_form
生成的,它從element_info('form')
讀取動作數據,這是由人口system_element_info
,這反過來,調用request_uri()
-並且在沒有request_uri()
約$base_url
。
我試圖用drush
清除緩存, drush
萬一我丟失了數據庫中的某些內容,但是這樣做沒有幫助。
編輯:似乎大多數鏈接都在調用url($path)
函數,該函數做了正確的事。 但這不是為表單的action
屬性調用的,除了從插件中呈現的表單(它似乎並沒有使用element_info
,而是調用url
構造其action
)。
EDIT2:如果不清楚,則$base_url
具有正確的值; 它只是沒有被應用(我看不到它將在哪里應用)。
問題確實出在system_element_info
調用request_uri
而不照顧$ base_url ...
但是像往常一樣,您可以更改:
function yourmodule_element_info_alter(&$type) {
global $base_url;
// Use $base_url for form action
$type['form']['#action'] = $base_url . request_path();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.