php.inc

php.inc

Ich habe die folgenden Dateien auf meinem Webserver:

/var/www/html/--+
                |
                +-misc--+
                |       |
                |       +-misc1--+
                |       |        |
                |       |        +-index.html
                |       |
                |       +-misc2--+
                |       |        |
                |       |        +-index.php
                |       |
                |       +-misc3.php
                |
                +-wordpress--+
                             |
                             +-index.php

Ich habe Nginx so eingerichtet, dasshttp://example.com/geht zu meiner Wordpress-Installation. In meinem vorherigen (Apache-)Setup konnte ich problemlos Aliase erstellen, um auf die Elemente zu verweisen, miscaber ich bin mir nicht sicher, wie das in Nginx geht.

    index index.php index.html;
    root /var/www/html/wordpress;

    location ~ [^/]\.php(/|$) {
        limit_except GET POST {}
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_buffer_size 16k;
        fastcgi_buffers 16 16k;

        fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param    PATH_INFO          $fastcgi_path_info;
        fastcgi_param    PATH_TRANSLATED    $document_root$fastcgi_path_info;
        fastcgi_param    SERVER_NAME        $host;
        fastcgi_param    HTTP_PROXY         "";

        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~* \.(?:css|js|jpg|jpeg|gif|png|mp4)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
    }

    location / {
        try_files $uri $uri/ /index.php;
        limit_except GET {}
    }

Was ich möchte ist:

Was ich versucht habe:

# http://example.com/misc1 shows index.html but anything else in the folder is 404
location /misc1 {
    alias /var/www/html/misc/misc1;
}

# http://example.com/misc1 gives 403, http://example.com/misc1/index.html gives 404
location /misc1/ {
    alias /var/www/html/misc/misc1;
}

# shows Wordpress 404 page
location /misc1/* {
    alias /var/www/html/misc/misc1;
}

# gives 403 error
location ~ /misc1 {
    alias /var/www/html/misc/misc1;
}

Nichts, was ich versucht habe, hatte irgendeinen Effekt auf PHP, es funktioniert nicht.

Antwort1

Ich bin mir nicht sicher, warum Sie Alias ​​verwenden. Versuchen Sie dies. Es ist nicht getestet, aber es sollte Sie zumindest näher an das bringen, was Sie erreichen möchten. Wenn es nicht funktioniert, kommentieren Sie mit Details, warum es nicht funktioniert, und zeigen Sie anwendbare Protokolle und Curls an.

root /var/www/html/misc
try_files $uri $uri/; # NB This can be specified at the server or location level

location / {
  root /var/www/html/wordpress;
  try_files $uri $uri/ /index.php?$args;
}

location /misc1/ {
  root /var/www/html/misc;
}

location /misc2/ {
  root /var/www/html/misc;
}

Bearbeiten Basierend auf dem Kommentar „Sobald ich die Root-Direktive auf Serverebene ändere, erhalte ich auf meiner Wordpress-Site eine 404-Fehlermeldung, als ob die Root-Direktive auf Standortebene ignoriert würde.“ könnten Sie Folgendes versuchen. Ich verwende diese Technik, wenn ich eine benutzerdefinierte PHP-App im Stammverzeichnis habe und Wordpress in einem Unterverzeichnis.

root /var/www/html/;
location / {
  try_files $uri $uri/ /wordpress/index.php?$args;
}

Antwort2

Alsowie sich herausstellt, locationBlöcke, die auf regulären Ausdrücken basieren, überschreiben immer andere locationBlöcke. Meine Konfiguration hatte zwei Regex-Speicherorte: den Block, der das Caching statischer Ressourcen aktivieren sollte, und den Block, der PHP aktivieren sollte. Da einer dieser Blöcke mit allen bereitgestellten Inhalten übereinstimmte,Jeder andere Standortblock wurde ignoriert!

Was ich letztendlich getan habe, istVerschachtelungsstandortblöcke, wobei die statischen Datei- und PHP-Blöcke in den Standortblöcken platziert werden. Jetzt sieht meine Konfiguration folgendermaßen aus:

php.inc

location ~ [^/]\.php(/|$) {
    limit_except GET POST {}
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }

    fastcgi_buffer_size 16k;
    fastcgi_buffers 16 16k;

    fastcgi_param    SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param    PATH_INFO          $fastcgi_path_info;
    fastcgi_param    PATH_TRANSLATED    $document_root$fastcgi_path_info;
    fastcgi_param    SERVER_NAME        $host;
    fastcgi_param    HTTP_PROXY         "";

    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

static.inc

location ~* \.(?:css|js|jpg|jpeg|gif|png|mp4)$ {
    expires 1M;
    access_log off;
    add_header Cache-Control "public";
}

beispiel.conf

index index.php index.html;
root /var/www/html/wordpress;

location / {
    try_files $uri $uri/ /index.php;
    limit_except GET {}
    include conf.d/php.inc;
    include conf.d/static.inc;
}

location /misc1 {
    root /var/www/html/misc/;
    include conf.d/static.inc;
}

location /misc2 {
    root /var/www/html/misc/;
    include conf.d/php.inc;
    include conf.d/static.inc;
}

location /misc3.php {
    root /var/www/html/misc/;
    include conf.d/php.inc;
}

verwandte Informationen