我使用什么API函数来重定向到外部URL?


21

在编写用于重定向到Drupal路径的模块时,请使用drupal_goto

我应该使用一些API函数来重定向到外部页面吗?或者设置Locationdrupal_set_header要走的路?

PS我必须根据要求做一些处理;mod_rewrite/ mod_alias在Apache级别或Drupal Path redirect模块上,不能解决我的问题。

Answers:


25

您应该将drupal_goto()用于内部和外部重定向。

使用“外部”选项进行外部重定向: drupal_goto($url, array('external' => TRUE));

drupal_goto($ path ='',数组$ options = array(),$ http_response_code = 302)

$ options :(可选)附加选项的关联数组,包含以下元素:

  • 'query':要附加到URL的查询键/值对数组(不包含任何URL编码)。
  • 'fragment':要附加到URL的片段标识符(称为锚)。不要包含前导“#”字符。
  • 'absolute':默认为FALSE。是否强制输出为绝对链接(以http:开头)。对于将在网站外部显示的链接(例如在RSS feed中)很有用。
  • 'alias':默认为FALSE。给定的路径是否已经是URL别名。
  • 'external':给定路径是否是外部URL。
  • 'language':可选的语言对象。如果链接到的路径是站点内部的,则$ options ['language']用于查找URL的别名。如果省略$ options ['language'],将使用全局$ language_url。
  • 'https':此URL是否应指向安全位置。如果未定义,则使用当前方案,因此用户分别停留在HTTP或HTTPS上。TRUE强制执行HTTPS,而FALSE强制执行HTTP,但是仅当变量'https'设置为TRUE时才能强制执行HTTPS。
  • 'base_url':仅在内部使用,当依赖于语言的URL要求修改基本URL时。
  • 'prefix':仅在内部使用,以在依赖于语言的URL要求时修改路径。
  • 'script':禁用干净URL时,Drupal根目录中使用的脚本文件名,例如'index.php'。默认为空字符串,因为大多数现代Web服务器会自动找到“ index.php”。如果禁用了干净的URL,则$ path的值将作为查询参数'q'附加到返回URL中的$ options ['script']中。在无法配置为自动查找index.php的Web服务器上部署Drupal时,可以实现hook_url_outbound_alter()来将该值强制设置为'index.php'。
  • 'entity_type':称为url()的对象的实体类型。仅当entity_uri()调用url()时设置。
  • 'entity':为其生成URL的实体对象(例如节点)。仅当entity_uri()调用url()时设置。

$ http_response_code:(可选)用于重定向的HTTP状态代码,默认为302。3xx重定向状态代码的有效值在RFC 2616中定义,而在新HTTP状态代码的草稿中:

301:永久移动(大多数重定向的建议值)。

302:找到(Drupal和PHP中的默认值,有时用于向搜索引擎发送垃圾邮件)。

303:参见其他。

304:未修改

305:使用代理

307:临时重定向。

Drupal 8

Drupal 8 删除了drupal_goto函数,有关重定向到外部URL 的问题,请参见此答案:如何重定向到外部URL?


1
很好的答案
OV 2013年

+1上衣(和Nikhil M用于编辑输入)这个答案比官方的API文档更好:api.drupal.org/api/drupal/includes%21common.inc/function/…(在您的答案中,options数组是全面的描述)。+1也是Oleg的认可。
therobyouknow
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.