【问题标题】:Cannot redirect correctly with PHP无法使用 PHP 正确重定向
【发布时间】:2021-06-24 17:57:11
【问题描述】:

我想重定向一个网站中的博客。

例如,此 URL https://example.com/blog/june-2021/name-of-blog-post 应重定向到 https://example2.com/blog/june-2021/name-of-blog-post

有数百篇博文,所以我无法使用数组来一一重定向。

我使用 Pantheon 作为主机。我将脚本添加到 settings.php。

目前来自 example.com 的所有内容都转到 example2.com,因此无法正常工作。

这是我的脚本:

$url = $_SERVER['REQUEST_URI'];

$uri_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri_segments = explode('/', $uri_path);
$blog = $uri_segments[0];
$post_date = $uri_segments[1];
$post_name = $uri_segments[2];

if ((stripos($url, "/blog/") === 0) && (php_sapi_name() != "cli")) {
  header('HTTP/1.0 301 Moved Permanently'); header("Location: https://example2.com".$blog.$post_date.$post_name);
  if (extension_loaded('newrelic')) {
    newrelic_name_transaction("redirect");
  }
exit(); }

提前致谢!

【问题讨论】:

  • stripos 只接受 3 个参数并改用 !== false
  • 感谢您查看!那么我应该使用strstr 吗?

标签: php redirect pantheon


【解决方案1】:

您可以通过检查是否在$_SERVER['REQUEST_URI'] 中的任何位置找到!== false 来检查/blog/

if ((stripos($url, "/blog/") !== false) && (php_sapi_name() != "cli")) {

或者查看是否在$_SERVER['REQUEST_URI']的第一个0位置找到:

if ((stripos($url, "/blog/") === 0) && (php_sapi_name() != "cli")) {

注意事项

  1. stripos 只需要三个参数,而您只需要前两个。
  2. Location 标头应包含一个单个绝对 URI,例如 https://example2.com/blog/june-2021/name-of-blog-post,因此您可以查看其他 $_SERVER 变量来构造一个。

【讨论】:

  • 位置标头中可以包含这些变量吗?请看一下我更新的代码。提前致谢!
  • 是的,不过好像和$_SERVER['REQUEST_URI']一样
  • 它看起来是正确的,但是是一样的。回显它并查看它是什么以及它是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多