Làm cách nào để buộc URL chuẩn sử dụng http?


10

Trên trang của chúng tôi, chúng tôi sử dụng mô-đun Metatag để hiển thị thẻ meta chuẩn. Trong cấu hình, chúng tôi sử dụng [current-page:url:absolute]mã thông báo. Điều này hoạt động tốt, nhưng vấn đề là, dù trang được truy cập bởi HTTP hay HTTPS, giao thức này được sử dụng trong URL chuẩn.

Đối với mục đích SEO, chúng tôi muốn URL chuẩn giống nhau và sử dụng HTTP cho cả hai giao thức.

Làm thế nào chúng ta có thể đạt được điều này?


2
Thay vì làm điều đó trong Drupal, tôi chỉ đơn giản là buộc tất cả lưu lượng truy cập vào HTTPS theo mặc định thông qua .htaccesshoặc cấu hình Apache. Vấn đề được giải quyết.
leymannx

Câu trả lời:


8

Drupal 7

Bạn có thể thực hiện hook_html_head_alter()để thay đổi thẻ đầu; Sau đây là chưa được kiểm tra nhưng nên thực hiện các mẹo:

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']);
      }
    }
  }
}

2

Với mô-đun siêu dữ liệu, bạn có thể sử dụng mã thông báo [current-page: url: tương đối] thay vì mã thông báo [current-page: url: perfect].

vì vậy thẻ canonical của bạn sẽ trở thành một cái gì đó như: http: //www.mywebsite [current-page: url: tương đối]


0

Drupal 8

Đối với các nút bạn phải sử dụng hook_ENTITY_TYPE_view_altervì đó là nơi mà chúng được thêm vào ban đầu NodeViewController::view().

Và để tôi lưu ý rằng bạn có thể tốt hơn bằng cách chuyển hướng tất cả lưu lượng truy cập đến SSL theo mặc định: Làm cách nào để tạo toàn bộ HTTPS của trang web?

/**
 * 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;
      }
    }
  };
}

Tôi mới phát hiện ra rằng cuối cùng chúng ta sẽ tìm thấy tất cả các thẻ đầu hook_preprocess_htmltrong $variables['page']['#attached']mảng cần thay đổi.


-2

Gọi tôi là điên và làm ơn sửa tôi nếu tôi sai, nhưng bạn không thể mã hóa URL bằng HTTP được không?

Tôi chắc chắn có điều gì đó tôi đang thiếu, nhưng nếu bạn thả URL đầy đủ thay vì sử dụng mã thông báo, bạn sẽ kết thúc với URL cụ thể đó là tiêu chuẩn cho mọi biến thể của trang mà Drupal tạo ra.

Thông báo trước là nó tạo ra một cơn ác mộng cập nhật khi bạn phải nhớ thay đổi quy tắc nếu bí danh của trang thay đổi.


Đôi khi, giống như khi bạn sử dụng Truy cập tên miền, một số bài viết chỉ có sẵn trên các tên miền cụ thể và URL mã hóa cứng sẽ tạo ra các liên kết chết.
Mołot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.