Eu tenho os seguintes arquivos no meu servidor web:
/var/www/html/--+
|
+-misc--+
| |
| +-misc1--+
| | |
| | +-index.html
| |
| +-misc2--+
| | |
| | +-index.php
| |
| +-misc3.php
|
+-wordpress--+
|
+-index.php
Eu tenho o Nginx configurado de tal formahttp://exemplo.com/vai para minha instalação do Wordpress. Na minha configuração anterior (Apache), consegui criar facilmente aliases para apontar para os itens, misc
mas não tenho certeza de como fazer isso no 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 {}
}
O que eu gostaria é:
- http://exemplo.com/carrega /var/www/html/wordpress/index.php
- http://example.com/misc1carrega /var/www/html/misc/misc1/index.html
- http://example.com/misc2carrega /var/www/html/misc/misc2/index.php
- http://example.com/misc3.phpcarrega /var/www/html/misc/misc3.php
O que eu tentei:
# 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 do que tentei teve efeito no PHP, não funciona.
Responder1
Não sei por que você está usando o alias. Tente isso, não foi testado, mas deve deixá-lo pelo menos mais perto do que você está tentando alcançar. Se não funcionar, comente com detalhes sobre por que não funciona e mostre logs e curls aplicáveis.
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 Com base no comentário "Assim que altero a diretiva root no escopo do servidor, recebo 404 no meu site Wordpress, como se estivesse ignorando a diretiva root no escopo do local." você poderia tentar isso. Eu uso essa técnica quando tenho um aplicativo PHP personalizado no diretório raiz com o Wordpress em um subdiretório.
root /var/www/html/;
location / {
try_files $uri $uri/ /wordpress/index.php?$args;
}
Responder2
Entãocomo acontece, location
os blocos baseados em expressões regulares sempre substituirão outros location
blocos. Minha configuração tinha dois locais de regex: o bloco destinado a habilitar o cache em recursos estáticos e o bloco destinado a habilitar o PHP. Como um desses blocos correspondia a todo o conteúdo veiculado,todos os outros blocos de localização estavam sendo ignorados!
O que acabei fazendo éblocos de localização de aninhamento, colocando o arquivo estático e os blocos PHP dentro dos blocos de localização. Agora minha configuração está assim:
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";
}
exemplo.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;
}