簡體   English   中英

升級Drupal后表單中的$ base_url問題

[英]$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_formaction是從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM