如何获取 Drupal 页面的完整 URL?

Posted

技术标签:

【中文标题】如何获取 Drupal 页面的完整 URL?【英文标题】:How to get the full URL of a Drupal page? 【发布时间】:2010-10-16 17:58:00 【问题描述】:

我需要获取 Drupal 站点中当前页面的 URL。它是什么内容类型无关紧要 - 可以是任何类型的节点。

我不是在寻找主题路径、基本 url 或 Drupal 的 get_destination。我正在寻找一个函数或变量,它将完整地为我提供以下信息:

http://example.com/node/number

有或没有(更有可能)http://

【问题讨论】:

drupal_get_destination 是解决方案,因为您知道域名,如果您正在为同一个域编码,则可以使用它! 相关:How do I get the full URL of the current page? 在 Drupal SE 【参考方案1】:

也许您想要的只是普通的旧预定义变量。

考虑尝试

$_SERVER['REQUEST_URI'']

或阅读更多here。

【讨论】:

【参考方案2】:

drupal_get_destination() 有一些内部代码指向正确的位置以获取当前内部路径。要将该路径转换为绝对 URL,url() 函数应该可以解决问题。如果传入了“绝对”选项,它将生成完整的 URL,而不仅仅是内部路径。它还将交换当前路径的任何路径别名。

$path = isset($_GET['q']) ? $_GET['q'] : '<front>';
$link = url($path, array('absolute' => TRUE));

【讨论】:

根据您的链接,drupal_get_destination() 返回“destination=/node/number”,或者,对于 /node/number?destination=bla,“destination=bla”。将此传递给 url() 对我来说似乎不起作用。 多哈。你是对的。我已经用正确的代码更新了 sn-p。谢谢! 很酷,但我必须添加:$echo link; 才能让 Facebook 应用程序正常工作!谢谢!【参考方案3】:

尝试以下方法:

url($_GET['q'], array('absolute' => true));

【讨论】:

这有点更加drupaly:url(current_path(), array('absolute' => true));【参考方案4】:

这是我发现的有用的东西

global $base_root;
$base_root . request_uri();

返回查询字符串,它是核心中使用的:page_set_cache()

【讨论】:

请注意,如果您的站点不在域根目录下,此方法将不起作用。例如,如果您的基本 URL 是 example.com/folder,则此方法将生成 example.com/folder/folder/page。 如果是这种情况,那么核心中存在错误。看到 api.drupal.org/api/drupal/includes!bootstrap.inc/function/… "Build $base_root (直到 "scheme://" 之后的第一个斜线的所有内容) 中的代码 cmets。" 如果您的 Web 服务器为 $_SERVER 传递了错误的值,则可能会导致问题,请参见 api.drupal.org/api/drupal/includes!bootstrap.inc/function/…。【参考方案5】:

你也可以这样做:

$current_url = 'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

速度有点快。

【讨论】:

总是编程到接口而不是实现。【参考方案6】:

这个方法都是老方法,在drupal 7中我们可以很简单地搞定

    current_path()
http://example.com/node/306 返回“node/306”。 http://example.com/drupalfolder/node/306 返回“node/306”,而 base_path() 返回“/drupalfolder/”。 http://example.com/path/alias(这是 node/306 的路径别名)返回“node/306”而不是路径别名。

还有一个差别很小的函数

request_path()
http://example.com/node/306 返回“node/306”。 http://example.com/drupalfolder/node/306 返回“node/306”,而 base_path() 返回“/drupalfolder/”。 http://example.com/path/alias(这是 node/306 的路径别名)返回“路径/别名”,而不是内部路径。 http://example.com/index.php 返回一个空字符串(意思是:首页)。 http://example.com/index.php?page=1 返回一个空字符串。

【讨论】:

问题是关于获取 full URL,即。 e.类似http://example.com/node/number .【参考方案7】:

我发现使用令牌非常干净。 它已集成到 Drupal 7 的核心中。

<?php print token_replace('[current-page:url]'); ?>

【讨论】:

令牌 [site:current-page:path] 也应该可以工作。【参考方案8】:

以下是更多Drupal-ish

url(current_path(), array('absolute' => true)); 

【讨论】:

【参考方案9】:

对于 Drupal 8,您可以这样做:

$url = 'YOUR_URL';
$url = \Drupal\Core\Url::fromUserInput('/' . $url,  array('absolute' => 'true'))->toString();

【讨论】:

以上是关于如何获取 Drupal 页面的完整 URL?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 7:如何获取当前页面的完整 URL

Django REST 框架。如何获取包含协议、域和路径的页面的完整 url?

如何在 Windows/IIS 服务器上获取当前页面的完整 URL?

drupal路径别名存在与否

Cakephp3:如何在询问标记后使用get参数获取当前页面的完整URL

如何在 Drupal 7 中的 URL 中获取视图(上下文过滤器)中的结果