所以我有这个 URL:/web/cms.php?open=unsereteam
我想重定向至:https://www.camper-center.ch/portrait/unser-team.html
我尝试过这个:
rewrite ^/web/cms.php?open=unsereteam$ https://www.camper-center.ch/portrait/unser-team.html permanent;
和这个:
if ($args ~* "/web/cms.php?open=unsereteam") {
rewrite ^ https://www.camper-center.ch/portrait/unser-team.html? last;
}
不起作用……
感谢 Ivan Shatsky 的帮助:
if ($request_uri = "/web/cms.php?open=unsereteam") {
rewrite ^ https://www.camper-center.ch/portrait/unser-team.html? last;
}
如果我有多个参数,例如
if ($request_uri = "/web/listing.php?monat=03&jahr=2018") {
rewrite ^ https://www.camper-center.ch/news/aktuell.html?month=03&year=2018? last;
}
我正在尝试类似的事情:
if ($arg_monat = "02" & $arg_jahr="2020") {
rewrite ^/web/cms\.php$ https://www.camper-center.ch/news/aktuell.html?month=02&year=2020? last;
}
但这显然也不起作用。
也许您对此也有解决方案?
提前致谢!
编辑:我正在尝试这样的事情:
if ($arg_monat && $arg_jahr ) {
rewrite ^/web/listing\.php$ https://www.camper-center.ch/news/aktuell.html?month=$arg_monat&year=$arg_jahr? last;
}
最后我想要将第一个 url 重定向到第二个:
/web/listing.php?monat=02&jahr=2020
到
/news/aktuell.html?month=02&year=2020
答案1
正如人们一千遍所说的那样,rewrite
和location
指令都适用于规范化URI不包括请求的查询部分,但仅/web/cms.php
针对您的情况。$args
变量包含请求的查询部分(open=unsereteam
针对您的情况)。它是$request_uri
包含原始状态的完整请求 URI 的。您可以使用
if ($request_uri = "/web/cms.php?open=unsereteam") {
rewrite ^ https://www.camper-center.ch/portrait/unser-team.html? last;
}
或不区分大小写的比较
if ($request_uri ~* "^/web/cms\.php\?open=unsereteam") {
rewrite ^ https://www.camper-center.ch/portrait/unser-team.html? last;
}
但如果您的请求在参数之前有一些额外的查询参数,它将不匹配open
。更好的方法是
if ($arg_open = "unsereteam") { # or ($arg_open ~* "^unsereteam$") for case insensitive check
# do the rewrite only on '/web/cms.php' URI
rewrite ^/web/cms\.php$ https://www.camper-center.ch/portrait/unser-team.html? last;
}