Puncte:1

NGINX obține o aplicație într-un subdosar pentru a funcționa cu redirecționări

drapel cn

Am instalat Mautic într-un subdosar ca: exemplu.com/m
Majoritatea Mautic funcționează bine cu configurația mea (panoul de administrare, folosind Mautic etc.), dar pentru unele redirecționări din subfolderul meu, primesc un 404:

exemplu.com/m 200
exemplu.com/m/form/9 200
example.com/m/form/generate.js?id=9 404

(/formularul nu există - ar trebui să fie redirecționat/generat de Mautic dinamic)

Toate fișierele din sistemul de fișiere aparțin www-data.

Conf. mea nginx pentru gazdă:

Server {
    nume_server www.example.com;
    rewrite_log on;

    root /var/www/example.com/www.example.com;
    index index.php index.html index.htm;

    access_log /var/log/nginx/example.com_access.log;
    notificare error_log /var/log/nginx/example.com_error.log;

    ######################################
    ## Porniți configurația specifică Mautic #####
    ######################################

    locație /m {
        # Funcționează în ciuda formelor:
        try_files $uri $uri/ /m/?q=$uri&$args;
    }

    ######################################
    ## Încheierea configurației specifice Mautic #####
    ######################################

    Locație / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    locație ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    }

    # O durată lungă de viață a memoriei cache a browserului poate accelera vizitele repetate la pagina dvs
    locație ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log off;
       log_not_found off;
       expiră 360d;
    }

    # dezactivați accesul la fișierele ascunse
    locație ~ /\.ht {
      access_log off;
      log_not_found off;
      nega totul;
    }

    asculta [::]:443 ssl; # gestionat de Certbot
    asculta 443 ssl; # gestionat de Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # gestionat de Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # gestionat de Certbot
    includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}

Server {
    asculta 443 ssl;
    nume_server example.com;
    asculta [::]:443 ssl; # gestionat de Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # gestionat de Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # gestionat de Certbot
    includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
    returnează 301 https://www.example.com$request_uri;

}

Server {
    dacă ($gazdă = exemplu.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


    dacă ($gazdă = www.example.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


    nume_server example.com www.example.com;
    asculta 80;
    asculta [::]:80;
    returnează 301 https://$host$request_uri;
    #return 404; # gestionat de Certbot

}

ce fac greșit?

Richard Smith avatar
drapel jp
Blocul dvs. `locație ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$` gestionează URI-ul care se termină cu `.js`. Ați putea încerca să mutați acel bloc în blocul `location /`.
drapel cn
Chiar asa este corect. Acum merge. Dacă îl adaugi ca răspuns, îl voi accepta :)
Puncte:1
drapel jp

Vrei URI care încep cu /m să fie tratate de către locație /m bloc.

Cu toate acestea, locațiile expresiilor regulate au prioritate, deci URI-ul /m/form/generate.js este de fapt gestionat de o altă locație care se potrivește cu toate URI-urile care se termină cu .js. Vedea acest document.

Există ^~ operator care forțează locația prefixului să aibă prioritate, dar asta nu va funcționa în cazul dvs., deoarece aplicația este PHP și aveți nevoie de URI care se termină cu .php să fie tratate de către locație ~ \.php$ bloc.

Așa că, în schimb, vă sugerez să-i cuib Locație provocând problema în interiorul Locație / bloc.

De exemplu:

locație /m {
    try_files $uri $uri/ /m/?q=$uri&$args;
}

Locație / {
    try_files $uri $uri/ /index.php$is_args$args;

    locație ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
        access_log off;
        log_not_found off;
        expiră 360d;
    }
}

locație ~ \.php$ {
    ...
}

locație ~ /\.ht {
    ...
}
drapel cn
Multumesc, foarte de inteles!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.