我必须在 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;
...
}
}