php怎么取301地址
时间 : 2023-04-05 06:39:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

当一个网站需要永久移动一个页面,并确保用户的书签或搜索引擎中的链接能够重定向到新的页面时,通常会使用 HTTP 301 重定向。PHP 提供了一种获取 HTTP 301 重定向地址的方法,即使用 `curl` 库。

以下是获取 HTTP 301 重定向地址的 PHP 代码:

$url = 'http://www.example.com'; // 要获取重定向地址的网址

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);

$headers = substr($response, 0, $headerSize);

$headerArray = explode("\r\n", $headers);

$location = '';

foreach ($headerArray as $headerLine) {

if (strpos(strtolower($headerLine), 'location:') !== false) {

$location = trim(substr($headerLine, strpos($headerLine, ':') + 1));

}

}

if (!empty($location)) {

echo 'HTTP 301 重定向地址为:' . $location;

} else {

echo '未找到 HTTP 301 重定向地址。';

}

在上述代码中,`curl_init` 函数初始化一个新的 cURL 会话,设置 URL 为要获取重定向地址的网址。`CURLOPT_HEADER` 选项指定要包括响应头信息。`CURLOPT_FOLLOWLOCATION` 选项设置为 false 禁用自动跟随重定向。`CURLOPT_RETURNTRANSFER` 选项设置为 true 来返回结果而不打印它。

然后,使用 `curl_exec` 函数执行 cURL 会话,并使用 `curl_getinfo` 函数获取响应头的大小。通过使用 `substr` 函数截取响应头部分,并使用 `explode` 函数将其分割成行数组。

接着,使用 `foreach` 循环遍历响应头数组并使用 `strpos` 函数搜索 `location` 头行,并使用 `trim` 函数和 `substr` 函数获取 HTTP 301 重定向地址。

最后,如果找到 HTTP 301 重定向地址,则输出结果。否则,输出未找到 HTTP 301 重定向地址的消息。

注意,如果要获取的网址没有进行 HTTP 301 重定向,则上述代码将无法返回 HTTP 301 重定向地址。

在 PHP 中,可以通过以下几种方法获取 301 重定向的地址:

1. 使用 cURL 函数:可以使用 cURL 函数将 HTTP 请求发送到 URL,然后获取相应的 HTTP 头信息。如果 URL 返回 301 状态码,则可以从响应头中获取重定向的地址。

以下是一个简单的例子:

```php

$url = 'https://example.com';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

curl_exec($ch);

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode == 301) {

$redirectUrl = curl_getinfo($ch, CURLINFO_REDIRECT_URL);

echo '301 redirect url: ' . $redirectUrl;

}

curl_close($ch);

在上面的代码中,`curl_setopt` 函数的参数 `CURLOPT_FOLLOWLOCATION` 被设置为 `false`,这样cURL函数会停止在第一次访问被重定向的 URL。然后我们可以使用 `curl_getinfo` 函数获取 HTTP 状态码以及重定向 URL。

2. 使用 PHP 的 `http_response_code` 函数:在 PHP 中,可以使用 `http_response_code` 函数获取当前页面的 HTTP 响应状态码。如果当前页面是一个 301 重定向页面,那么可以从响应头中获取重定向地址。

以下是一个例子:

```php

if (http_response_code() == 301) {

$headers = headers_list();

foreach ($headers as $header) {

if (strpos($header, 'Location: ') === 0) {

$redirectUrl = substr($header, strlen('Location: '));

echo '301 redirect url: ' . $redirectUrl;

break;

}

}

}

在上面的代码中,我们首先检查 HTTP 响应状态码是否为 301。如果是,我们使用 `headers_list` 函数获取页面 HTTP 头信息。然后使用循环遍历 HTTP 头信息,找到 `Location` 头信息,并从中获取重定向 URL。

总之,可以使用 cURL 或 PHP 的 `http_response_code` 函数来获取 301 重定向地址,具体方法取决于具体的应用场景。