nginx ملفات PHP متعددة في تعليمات try_files

1

صباح الخير ، أريد أن أصنع نفس nginx vhost الذي يمكن أن يعمل مع تطبيقات php المختلفة (symfony و Thelia). مشكلتي مع تعليمات try_files . في symfony يجب أن تستهدف try_files app.php ولكن في Thelia يجب أن تستهدف index.php . لذلك أردت تعديل عبارة try_files على النحو التالي:

server {
    listen 80;
    server_name *.tld;

    root /var/www/web;

    location / {
        try_files $uri /app.php$is_args$args /index.php$is_args$args;
    }

    location ~ ^/(app|app_dev|config|index|index_dev)\.php(/|$) {
        fastcgi_pass php_alias:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param APP_ENV dev;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

}

لسوء الحظ ، لا يعمل. لم يعد يتم تفسير Php. كيف يمكنني تسجيل عدة ملفات php في بيان try_files؟

1 إجابة

1
افضل جواب

ال try_files يمكن أن يحتوي التوجيه على URI افتراضي واحد فقط وهو العنصر الأخير ويأتي بعد كل عناصر الملف . المشكلة التي تواجهها هي أن عناصر الملف تتسبب في معالجة الطلب ضمن التيار location . انظر هذه الوثيقة للمزيد.

يمكنك استخدام مسمى location للتعامل مع URI الافتراضي الاختياري ، على سبيل المثال:

location / {
    try_files $uri @rewrite;
}
location @rewrite {
    if (-f $document_root/app.php ) {
        rewrite ^ /app.php last;
    }
    rewrite ^ /index.php last;
}

انظر هذا الحذر عند استخدام if .

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام