답변:
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
에 $variables['page']['#attached']
배열이 변경 될 수 있습니다.
나를 미치게하고 내가 틀렸다면 정정하십시오.하지만 HTTP로 URL을 하드 코딩 할 수는 없습니까?
누락 된 것이 있다고 확신하지만 토큰을 사용하는 대신 전체 URL을 입력하면 Drupal이 생성하는 페이지의 모든 변형에 대한 표준 URL로 해당 특정 URL로 끝납니다.
주의해야 할 점은 페이지의 별칭이 변경 될 경우 표준을 변경해야한다는 것을 기억해야하기 때문에 업데이트 악몽이 발생한다는 것입니다.
.htaccess
또는 Apache 구성을 통해 모든 트래픽을 HTTPS로 강제 전송합니다 . 문제 해결됨.