亲爱的StackOverflow人口,
我一直试图让两件简单的事情发挥作用,但我不能得到其中的一件。
所以我有nginx服务器块,它看起来像下面的
server {
listen 443 default;
server_name secure.<domain>.com;
if ($host = $server_name) {
rewrite ^(.*) https://secure.<domain2>.com$request_uri?systpl=<template> permanent;
}
我也尝试过,因为我知道IF是邪恶的,我尝试了类似
的东西return 301 https://secure.<domain2>.com$request_uri?systpl=<template>;
当然然后我禁用上面的if语句,这样就可以了,所以当我们转到
时https://secure.domain.com =&gt; https://secure.domain2.com/?systpl=template
这样可以正常工作,当您输入PHP结尾时,例如
https://secure.domain.com/cart.php =&gt; https://secure.domain2.com/cart.php?systpl=template
这适用于IF和简单返回,我想我需要在另一个服务器块或语句中获取另一个,但这里是问题所在
现在如果你转到
https://secure.domain.com/cart.php?id=7 =&gt; https://secure.domain2.com/cart.php?id=7?systpl=template
这当然不起作用,因为它必须是&amp; systpl ,因为它不以 .php 结束,我怎样才能实现这一点呢添加&amp; systpl 如果它不以 .php 结尾并以字符串结尾,如果没有,则附加?systpl ,如果它以 .PHP
我希望有人知道这是怎么做的,因为我用各种搜索字符串抓取了谷歌搜索结果的前6页。
答案 0 :(得分:1)
如果您要添加参数,则应该避免使用$request_uri
并使用$uri
和$args
代替。
return
语句可以改写为:
return 301 https://example.com$uri?systpl=template&$args;
rewrite
指令默认附加参数,因此这应该有效:
rewrite ^ https://example.com$uri?systpl=template permanent;
但由于它与return
语句相同,因此首选return
语句。有关详细信息,请参阅this document。