如何强制规范URL使用http?


10

在我们的页面上,我们使用Metatag模块显示规范的meta标签。在配置中,我们使用[current-page:url:absolute]令牌。这可以很好地工作,但是问题是,无论页面是通过HTTP还是HTTPS访问,该协议都在规范的URL中使用。

出于SEO的目的,我们希望规范的URL相同,并且对两种协议都使用HTTP。

我们怎样才能做到这一点?


2
而不是在Drupal中这样做,我默认会通过.htaccess或Apache配置将所有流量强制强制为HTTPS 。问题解决了。
leymannx

Answers:


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 [current-page:url:relative]


0

Drupal 8

对于节点,您必须使用,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']被更改。


-2

叫我疯了,如果我输入错了,请纠正我,但是您是否不能仅使用HTTP对URL进行硬编码?

我确定确实缺少某些东西,但是如果您输入完整的URL而不是使用令牌,则最终将使用该特定URL作为Drupal创建的每个页面变体的规范。

需要注意的是,它会造成更新噩梦,因为如果页面别名发生更改,您必须记住要更改规范。


有时,例如当您使用域访问时,某些文章仅在特定域上可用,并且硬编码URL会创建无效链接。
Mołot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.