NGINX使用查询参数重写为文件

时间:2019-02-16 22:43:58

标签: nginx nginx-location

我希望nginx将网址重写为特定的php文件,该文件可以由第一个斜杠之前的内容确定

例如:

  1. testing.com/testtest.com/test将被重写为test.php

  2. testing.com/test2/variable/another-variable将被重写为/test2.php?q=variable/another-variable

然后我将使用PHP爆炸q GET参数。

我目前尝试过的是:

location / {
    try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}

这在上面显示的示例1中有效,但在示例2中返回了404,但URL更复杂。

1 个答案:

答案 0 :(得分:1)

您可以使用带有location指令的命名try_files来实现一个或多个rewrite语句。有关详细信息,请参见this document

例如:

location / {
    try_files $uri $uri/ $uri.html @php;
}
location @php {
    rewrite ^(/[^/]+)$ $1.php last;
    rewrite ^(/[^/]+)/(.*)$ $1.php?q=$2 last;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}

rewrite语句按顺序求值。第二条try_files语句可确保PHP文件确实存在,并避免使用passing uncontrolled requests to PHP