如何获取 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?的主要内容,如果未能解决你的问题,请参考以下文章
Django REST 框架。如何获取包含协议、域和路径的页面的完整 url?
如何在 Windows/IIS 服务器上获取当前页面的完整 URL?