Url rewriting 如何使用nginx重写避免问号?

Url rewriting 如何使用nginx重写避免问号?,url-rewriting,nginx,migration,rewrite,Url Rewriting,Nginx,Migration,Rewrite,我忙着将我的网站迁移到nginx,我有很多重写规则需要转换,我遇到的唯一问题是当我尝试这样做时: rewrite ^/media?(.*)$ /in.php?id=$1 last; 这会导致php读取$1 ad作为$\u GET的键,而不是它的值。有没有办法改变这种行为而不诉诸困难的基于位置的方法?我问这个问题的原因是因为我有多个基于查询字符串的重写需要解决。nginx中?之后的所有内容都称为变量$query\u stri

我忙着将我的网站迁移到nginx,我有很多重写规则需要转换,我遇到的唯一问题是当我尝试这样做时:

rewrite ^/media?(.*)$                   /in.php?id=$1                   last;

这会导致php读取$1 ad作为$\u GET的键,而不是它的值。有没有办法改变这种行为而不诉诸困难的基于位置的方法?我问这个问题的原因是因为我有多个基于查询字符串的重写需要解决。

nginx中
之后的所有内容都称为变量
$query\u string
,因此如果您想从位置规则
^/media(.*)$
转换整个查询字符串,因为它看起来像是您想要的,尝试使用以下方法:

rewrite ^/media?(.*)$   /in.php?id=$query_string   last;

这就是您要寻找的吗?

nginx中
之后的所有内容都被称为变量
$query\u string
,因此,如果您想从位置规则
^/media(.*$
)转换整个查询字符串,因为它看起来像是您想要的,请尝试使用以下方法:

rewrite ^/media?(.*)$   /in.php?id=$query_string   last;

这就是您要查找的内容吗?

是否要将
媒体中的查询值传递到.php
中的
,是吗?例如,将
/metdia?hello=3
重写为
/in.php?id=3
?是的,这是正确的。例如:/media?123应转换为/in.php?id=123是否要传递到
in.php
中的
media
查询值,是吗?例如,将
/metdia?hello=3
重写为
/in.php?id=3
?是的,这是正确的。例如:/media?123应该翻译成/in.php?id=123对不起,最后一个问题,这是如何工作的:
rewrite^/search\?q=(*)&p=([0-9]+)$/search.php?q=$1&p=$2 last
如果将其更改为
^/search\?q=([^&]*)和p=([0-9]+)$
,则它可能会按照您的预期工作,因为
[^&]
表示除
&
之外的任何字符,在您的规则中,我不确定如果有人键入
/search?q=89KJAF&p=894
,那么
89KJAF&p=894
可以变成
$1
还有一件事-nginx可能会附加原始查询字符串(在
$query\u string
变量中)在查询字符串之后。要更改此设置,只需使用此指令
set$args”“<代码>$query\u字符串
在请求处理期间是不可更改的,但它的实际值会附加到最终请求nginx存储在
$args
变量中。当您想放弃初始查询字符串并仅通过指令将自己的just set
$args
传递给空字符串时。对不起,最后一个问题,这是如何工作的:
rewrite^/search\?q=(*)&p=([0-9]+)$/search.php?q=$1&p=$2 last
如果将其更改为
^/search\?q=([^&]*)和p=([0-9]+)$
,则它可能会按照您的预期工作,因为
[^&]
表示除
&
之外的任何字符,在您的规则中,我不确定如果有人键入
/search?q=89KJAF&p=894
,那么
89KJAF&p=894
可以变成
$1
还有一件事-nginx可能会附加原始查询字符串(在
$query\u string
变量中)在查询字符串之后。要更改此设置,只需使用此指令
set$args”“<代码>$query\u字符串
在请求处理期间是不可更改的,但它的实际值会附加到最终请求nginx存储在
$args
变量中。当您想要放弃初始查询字符串并仅传递您自己的字符串时,请使用
set
指令将
$args
设置为空字符串。