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, misc
pero 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:
- http://ejemplo.com/carga /var/www/html/wordpress/index.php
- http://ejemplo.com/misc1cargas /var/www/html/misc/misc1/index.html
- http://ejemplo.com/misc2cargas /var/www/html/misc/misc2/index.php
- http://ejemplo.com/misc3.phpcargas /var/www/html/misc/misc3.php
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, location
los bloques basados en expresiones regulares siempre anularán otros location
bloques. 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;
}