nginx 在子文件夹中重写

nginx 在子文件夹中重写

我现在正在研究 nginx 重写规则,所以这对我来说是一个相当新的话题。

我在根文件夹中有一系列页面,我使用重写规则如下:

server {
listen 80;
## listen [::]:80 default_server ipv6only=on;
listen 443 ssl;

root /nginx/gtt/;
index index.html index.htm index.php gttindex.php;

# Make site accessible from http://localhost/
server_name gtt.deb;

ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;

client_max_body_size 10M;


# When access gps page just show gps
if ( $request_uri = "/gps" ) {
    rewrite ^ /gps.lf.ws.vh.sprite.php break;
}
# Administration
if ( $request_uri = "/setup" ) {
    rewrite ^ /admin.php break;
}
# For clientadmin show admin
if ( $request_uri = "/error" ) {
    rewrite ^ /gttindex.php?WARNING=wrongcredentials break;
} 

rewrite ^/cargo(.*)$/(.*)$ /clientadmin/edit_task_details_form_multi$1.php?taskid=$2 break;
rewrite ^/cargoadmin    /clientadmin/admin.php last;

location / {
    index index.html index.htm index.php gttindex.php;
    try_files $uri $uri/ =404;
}


}

将重定向至admin.php

当我必须在包含 4 个 php 脚本的子文件夹中重写时,出现了问题:

admin.php
edit_task_details_form.php
edit_task_details_form_multi2.php
edit_task_details_form_multi3.php

它不起作用并且/cargo2/var/cargo3/var(取决于我选择哪个)被附加到 url。

我想要实现的目标如下:

http://gtt.deb/clientadmin/admin.php->http://gtt.deb/cargoadmin

http://gtt.deb/clientadmin/edit_task_details_form_multi.php?task=1->http://gtt.deb/cargo/1

http://gtt.deb/clientadmin/edit_task_details_form_multi2.php?task=1->http://gtt.deb/cargo2/1

http://gtt.deb/clientadmin/edit_task_details_form_multi3.php?task=1->http://gtt.deb/cargo3/1

答案1

您错误地使用了rewrite指令。您没有if按照rewrite规则使用。

您应该像这样编写当前规则:

rewrite ^/gps$ /gps.lf.ws.vh.sprite.php break;
rewrite ^/setup$ /admin.php break;
rewrite ^/error$ /gttindex.php?WARNING=wrongcredentials break;

而且您很可能应该在规则中使用last而不是。break

对于实际问题,请尝试如下重写:

rewrite ^/cargoadmin$ /clientadmin/admin.php;
rewrite ^/cargo([0-9]?)/([0-9]+)$ /clientadmin/edit_task_details_form_multi$1.php?task=$2;

匹配([0-9]?)所有个位数或空字符串,并将数字捕获到 $1。([0-9]+)匹配多位数,并将其捕获到 $2 变量中。

$意味着字符串必须在那里结束,之后不能有任何多余的字符。

另外,您的 URL 系统看起来相当复杂,以后可能会引起很多问题。我会更加注意开发一个更简单、定义更明确的 URL 重写系统。

相关内容