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

0
задан 13 May 2015 в 19:34
1 ответ

Вы неправильно используете директиву rewrite. Вы не используете , если с правилами rewrite.

Вы должны написать свои текущие правила следующим образом:

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

И скорее всего вы должны использовать последнее вместо break в правилах.

Что касается актуальной проблемы, попробуйте переписать так:

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

The ([0-9]?) совпадает со всеми однозначными числами или пустой строкой, и захватывает число до $1. ([0-9]+) соответствует многозначным числам и перехватывает их в переменную $2.

$ означает, что строка должна заканчиваться на этом, после этого не может быть лишних символов.

Другое замечание: ваша система URL выглядит довольно сложной и вполне может вызвать много проблем в дальнейшем. Я бы обратил больше внимания на разработку более простой и хорошо определенной системы для переписывания URL.

.
1
ответ дан 4 December 2019 в 16:57

Теги

Похожие вопросы