Soru Nginx: Alt klasör için yeniden yazma kuralı


Bu projeleri müşterilere göstermek için üzerinde çalıştığım projeleri tutmak istediğim bir alt alan var.

/ Etc / nginx / sites-available / projects adresinden konfigürasyon dosyası şöyledir:

server {
    listen   80;
    server_name projects.example.com;
    access_log /var/log/nginx/projects.example.com.access.log;
    error_log /var/log/nginx/projects.example.com.error.log;

    location / {
        root   /var/www/projects;
        index  index.html index.htm index.php;
    }

    location /example2.com {
        root   /var/www/projects;
        auth_basic           "Stealth mode";
        auth_basic_user_file /var/www/projects/example2.com/htpasswd;
    }

    location /example3.com/ {
        index  index.php;

        if (-f $request_filename) {
            break;
        }
        if (!-f $request_filename) {
            rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;
            break;
        }
    }

    location ~ \.php {
        root /var/www/mprojects;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

Alt klasörlere farklı php motorları (wordpress, getimple vb.) Yerleştirmek istiyorum. Bu motorlar farklı querry parametrelerine (id, q, url vb.) Sahiptir, bu yüzden preety URL'lerin çalışması için yeniden yazmam gerekiyor. Ancak, yukarıda çalışmaz. Bu aldığım cevap:

Warning: Unknown: Filename cannot be empty in Unknown on line 0
Fatal error: Unknown: Failed opening required '' (include_path='.:/usr/local/lib/php') in Unknown on line 0

Eğer çıkarsam "konum /example3.com/"Kural, sonra her şey çalışır, ancak preety URL'leri yoktur. Lütfen yardım et.

Yapılandırma bu yayına dayanmaktadır: https://stackoverflow.com/questions/2119736/cakephp-in-a-subdirectory-using-nginx-rewrite-rules

Ben php-fpm ile Ubuntu 9.10 ve nginx / 0.7.62 kullanıyorum.


5
2018-04-10 13:13


Menşei


hala bunu düzeltmek için bir yol bulamadık :( - Misha Reyzlin


Cevaplar:


Yeniden yazmanın ikinci bölümündeki (.) Periyoddan kaçmamalısınız:

rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;

olmalı

rewrite ^/example3\.com/(.*)$ /example3.com/index.php?id=$1 last;

Ama ne yapıyorsun? İD gibi görünmek? Eğer bir sayıysa, bunu deneyebilirsiniz:

location /example3.com/ {
    index  index.php;
    rewrite "^/example3\.com/([0-9]+)$" /example3.com/index.php?id=$1 break;
}

10
2018-05-05 19:04