Answers:
您可以实施hook_html_head_alter()
更改头标签;以下未经测试,但应该可以解决问题:
function MYMODULE_html_head_alter(&$head_elements) {
foreach ($head_elements as $key => &$tag) {
if (strpos($key, 'drupal_add_html_head_link:canonical:') === 0) {
if (strpos('https://', $tag['#attributes']['href']) === 0) {
$tag['#attributes']['href'] = str_replace('https://', 'http://', $tag['#attributes']['href']);
}
}
}
}
对于节点,您必须使用,hook_ENTITY_TYPE_view_alter
因为这是最初从中添加节点的地方NodeViewController::view()
。
另外,请注意,通过默认情况下将所有传入流量重定向到SSL可能会更好:如何简单地使整个站点成为HTTPS?
/**
* Implements hook_ENTITY_TYPE_view_alter().
*/
function MYMODULE_node_view_alter(array &$build, Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display) {
if (isset($build['#attached']['html_head_link'])) {
foreach ($build['#attached']['html_head_link'] as $key => $head) {
if ((isset($head[0]['rel']) ? $head[0]['rel'] : FALSE) == 'canonical') {
$url = \Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])
->toString();
$url = str_replace('https://', 'http://', $url);
$build['#attached']['html_head_link'][$key][0]['href'] = $url;
}
}
};
}
我刚刚发现,最后我们会发现数组hook_preprocess_html
中的所有head标签都将$variables['page']['#attached']
被更改。
.htaccess
或Apache配置将所有流量强制强制为HTTPS 。问题解决了。