php.inc

php.inc

Tengo los siguientes archivos en mi servidor web:

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

Tengo Nginx configurado de tal manera quehttp://ejemplo.com/va a mi instalación de Wordpress. En mi configuración anterior (Apache) pude crear fácilmente alias para señalar los elementos, miscpero no estoy seguro de cómo hacerlo en Nginx.

    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 {}
    }

Lo que me gustaría es:

Lo que he probado:

# 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;
}

Nada de lo que he probado ha tenido ningún efecto en PHP, no funciona.

Respuesta1

No estoy seguro de por qué estás usando alias. Pruebe esto, no está probado, pero debería acercarlo al menos a lo que está tratando de lograr. Si no funciona, comente con detalles sobre por qué no funciona y muestre los registros y rizos aplicables.

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;
}

Editar Basado en el comentario "Tan pronto como cambio la directiva raíz en el ámbito del servidor, aparece 404 en mi sitio de Wordpress, como si estuviera ignorando la directiva raíz en el ámbito de la ubicación". podrías probar esto. Utilizo esta técnica cuando tengo una aplicación PHP personalizada en el directorio raíz con Wordpress en un subdirectorio.

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

Respuesta2

Entoncescomo resulta, locationlos bloques basados ​​en expresiones regulares siempre anularán otros locationbloques. Mi configuración tenía dos ubicaciones de expresiones regulares: el bloque destinado a habilitar el almacenamiento en caché en recursos estáticos y el bloque destinado a habilitar PHP. Dado que uno de estos bloques coincidía con todo el contenido que se servía,¡Todos los demás bloques de ubicación estaban siendo ignorados!

Lo que terminé haciendo esbloques de ubicación de anidación, colocando el archivo estático y los bloques PHP dentro de los bloques de ubicación. Ahora mi configuración se ve así:

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;
}

estático.inc

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

ejemplo.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;
}

información relacionada