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; } } 

将redirect到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 (取决于我select)被追加到该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

您正在使用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]?)匹配所有单位数字或空string,并将数字捕获到$ 1。 ([0-9]+)匹配多位数字,并将其捕获到$ 2variables中。

$表示string必须在那里结束,之后不能有任何额外的字符。

另外请注意,你的URL系统看起来相当复杂,以后可能会导致很多问题。 我会更加注意开发一个更简单,更好定义的URL重写系统。