nginx url 重写为 php-urls

nginx url 重写为 php-urls

我必须在 nginx 中永久重定向一些旧的 URL。旧的 URL 是旧式的 php URL,其中包括用于加载内容的参数。它们看起来像这样:

http://www.foo.com/index.php?site=foo
http://www.foo.com/index.php?site=bar

我想将它们重定向到其他 URL,例如:

http://www.foo.com/news
http://www.foo.com/gallery

关于如何实现这一点,有什么建议吗?我的尝试失败了。提前谢谢!

答案1

如果旧 URL 参数和新 URL 路径之间有直接映射,则可以使用这样的语法:

location /index.php {
  ...
  try_files $uri /$arg_site =404;
}

有了这样的配置,任何以 开头的请求/index.php都会首先尝试重新指向确切的 URL,然后如果没有匹配的文件或位置,/foo如果原始 URL 是,nginx 将尝试使用 进行内部重定向/index.php?site=foo。如果这也失败了,nginx 将发送404 HTTP Not Found响应。

该变量$arg_site被设置为URL参数的值site

答案2

我通过使用 php 而不是 nginx 重写功能解决了这个问题:

if (isset($_GET["site"]) {
  switch ($_GET["site"]) {
    case 'foo':
      Header( "HTTP/1.1 301 Moved Permanently" ); 
      Header( "Location: /foo" ); 
      break;

     ...
  }
}

相关内容