Điểm:1

NGINX nhận ứng dụng trong thư mục con để hoạt động với chuyển hướng

lá cờ cn

tôi đã cài đặt Mautic trong một thư mục con như: ví dụ.com/m
Hầu hết Mautic đều hoạt động tốt với cấu hình của tôi (bảng quản trị, sử dụng Mautic, v.v.) nhưng đối với một số chuyển hướng trong thư mục con của tôi, tôi nhận được một 404:

ví dụ.com/m 200
ví dụ.com/m/form/9 200
example.com/m/form/generate.js?id=9 404

(/ biểu mẫu không tồn tại - nó sẽ được chuyển hướng/tạo bởi Mautic một cách linh hoạt)

Tất cả các tệp trên hệ thống tệp thuộc về www-data.

Conf nginx của tôi cho máy chủ lưu trữ:

người phục vụ {
    server_name www.example.com;
    viết lại_log vào;

    gốc /var/www/example.com/www.example.com;
    chỉ mục index.php index.html index.htm;

    access_log /var/log/nginx/example.com_access.log;
    thông báo error_log /var/log/nginx/example.com_error.log;

    ######################################
    ## Bắt đầu cấu hình cụ thể của Mautic #####
    ######################################

    vị trí / m {
        # Làm việc bất chấp hình thức:
        try_files $uri $uri/ /m/?q=$uri&$args;
    }

    ######################################
    ## Kết thúc cấu hình cụ thể của Mautic #####
    ######################################

    địa điểm / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    vị trí ~ \.php$ {
        bao gồm đoạn trích/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    }

    # Thời gian tồn tại bộ nhớ cache của trình duyệt dài có thể tăng tốc các lượt truy cập lặp lại vào trang của bạn
    vị trí ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       truy cập_đăng xuất;
       log_not_found tắt;
       hết hạn 360đ;
    }

    # vô hiệu hóa quyền truy cập vào các tập tin ẩn
    vị trí ~ /\.ht {
      truy cập_đăng xuất;
      log_not_found tắt;
      Phủ nhận tất cả;
    }

    nghe [::]:443 ssl; # được quản lý bởi Certbot
    nghe 443 ssl; # được quản lý bởi Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
}

người phục vụ {
    nghe 443 ssl;
    server_name example.com;
    nghe [::]:443 ssl; # được quản lý bởi Certbot
    ssl_certificate /etc/letsencrypt/live/stats.example.com/fullchain.pem; # được quản lý bởi Certbot
    ssl_certificate_key /etc/letsencrypt/live/stats.example.com/privkey.pem; # được quản lý bởi Certbot
    bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
    trả lại 301 https://www.example.com$request_uri;

}

người phục vụ {
    nếu ($host = example.com) {
        trả lại 301 https://$host$request_uri;
    } # được quản lý bởi Certbot


    nếu ($host = www.example.com) {
        trả lại 301 https://$host$request_uri;
    } # được quản lý bởi Certbot


    server_name example.com www.example.com;
    nghe 80;
    nghe [::]:80;
    trả lại 301 https://$host$request_uri;
    #trả về 404; # được quản lý bởi Certbot

}

Tôi đang làm gì sai?

Richard Smith avatar
lá cờ jp
Khối `location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$` của bạn đang xử lý URI kết thúc bằng `.js`. Bạn có thể thử di chuyển khối đó vào bên trong khối `location /`.
lá cờ cn
Điều đó thực sự đúng. Nó đang làm việc bây giờ. Nếu bạn thêm nó làm câu trả lời, tôi sẽ chấp nhận nó :)
Điểm:1
lá cờ jp

Bạn muốn các URI bắt đầu bằng / phút được xử lý bởi vị trí /m chặn.

Tuy nhiên, các vị trí biểu thức chính quy được ưu tiên, vì vậy URI /m/form/generate.js đang thực sự được xử lý bởi một vị trí khác phù hợp với tất cả các URI kết thúc bằng .js. Nhìn thấy tài liệu này.

có cái ^~ toán tử buộc vị trí tiền tố được ưu tiên, nhưng điều đó sẽ không hoạt động trong trường hợp của bạn, vì ứng dụng là PHP và bạn cần các URI kết thúc bằng .php được xử lý bởi vị trí ~ \.php$ chặn.

Vì vậy, thay vào đó, tôi đề nghị bạn lồng các địa điểm gây ra vấn đề trong địa điểm / chặn.

Ví dụ:

vị trí / m {
    try_files $uri $uri/ /m/?q=$uri&$args;
}

địa điểm / {
    try_files $uri $uri/ /index.php$is_args$args;

    vị trí ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
        truy cập_đăng xuất;
        log_not_found tắt;
        hết hạn 360đ;
    }
}

vị trí ~ \.php$ {
    ...
}

vị trí ~ /\.ht {
    ...
}
lá cờ cn
Cảm ơn, rất dễ hiểu!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.