จะบังคับให้ URL แบบบัญญัติให้ใช้ http ได้อย่างไร?


10

ในหน้าของเราเราใช้โมดูลMetatagเพื่อแสดงเมตาแท็กที่ยอมรับ ในการกำหนดค่าเราใช้[current-page:url:absolute]โทเค็น วิธีนี้ใช้งานได้ดี แต่ปัญหาคือว่าหน้านี้เข้าถึงได้โดย HTTP หรือ HTTPS โปรโตคอลนี้ใช้ใน URL ที่เป็นมาตรฐานหรือไม่

สำหรับวัตถุประสงค์ของ SEO เราต้องการให้ URL ที่เป็นมาตรฐานเหมือนกันและใช้ HTTP สำหรับทั้งสองโปรโตคอล

เราจะบรรลุสิ่งนี้ได้อย่างไร


2
แทนที่จะทำเช่นนั้นใน Drupal ฉันก็แค่บังคับให้ปริมาณการใช้งานทั้งหมดไปยัง HTTPS ตามค่าเริ่มต้นผ่านทาง.htaccessหรือ Apache แก้ไขปัญหา.
leymannx

คำตอบ:


8

Drupal 7

คุณสามารถนำ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']);
      }
    }
  }
}

2

ด้วยโมดูลเมตาแท็กคุณสามารถใช้โทเค็น [current-page: url: relative] แทนโทเค็น [current-page: url: absolute]

ดังนั้นแท็กบัญญัติของคุณจะกลายเป็นเหมือน: http: //www.mywebsite [หน้าปัจจุบัน: url: ญาติ]


0

Drupal 8

สำหรับโหนดที่คุณต้องใช้เป็นที่สถานที่ที่พวกเขาได้เพิ่มเข้าไปในขั้นต้นจากhook_ENTITY_TYPE_view_alterNodeViewController::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']อาร์เรย์ที่จะมีการเปลี่ยนแปลง


-2

โทรหาฉันบ้าแล้วโปรดแก้ไขให้ฉันถ้าฉันผิด แต่คุณไม่สามารถเขียนโค้ด URL ด้วย HTTP ได้หรือไม่

ฉันแน่ใจว่ามีบางอย่างที่ขาดหายไป แต่ถ้าคุณวาง URL เต็มแทนที่จะใช้โทเค็นคุณจะได้ URL นั้นเป็นที่ยอมรับสำหรับทุกรูปแบบของหน้า Drupal ที่สร้างขึ้น

ข้อแม้คือมันสร้างฝันร้ายการอัปเดตตามที่คุณต้องจำไว้ในการเปลี่ยนบัญญัติถ้านามแฝงของหน้าเปลี่ยนแปลง


บางครั้งเช่นเมื่อคุณใช้การเข้าถึงโดเมนบทความบางบทความสามารถใช้ได้เฉพาะในบางโดเมนและ URL ที่เข้ารหัสยากจะสร้างลิงก์ที่ไม่ทำงาน
Mołot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.