Estou com uma situação estranha com um dos meus sites, ainda em desenvolvimento na AWS. Eu tenho nginx 1.9.9 com HHVM 3.6.6-1.amzn1.x86_64 em um t2.micro. Não é acessível ao público.
Eu tenho um site escrito personalizado na raiz do domínio, tenho o Wordpress no diretório /blog e o administrador do wordpress está em /blog/wp-admin. O site personalizado tem vários arquivos, incluindo index.php. Wordpress tem index.php e todos os tipos de outras coisas no diretório do blog, wp-admin usa index.php também.
Eu posso carregar o site personalizado, ele funciona totalmente. O administrador do Wordpress funciona totalmente. A tela inicial / lista de histórias do blog Wordpress funciona totalmente. O problema é que, quando clico em qualquer um dos links do artigo do blog para visualizá-lo na íntegra, ele mostra o índice inicial do site personalizado. Então, para dizer de outra maneira
http://www.example.com/index.php - custom website works
http://www.example.com/blog/index.php - blog index works
http://www.example.com/blog/2015/storyname - story load doesn't work with permalink %postname% regardless of text in post name - http://www.example.com/index.php loads
http://www.example.com/blog/2015/?p=96 - story load works
http://www.example.com/blog/wp-admin/ - admin works
Quando clico no link da história, obtenho o mesmo conteúdo da página como se tivesse clicado em http://www.example.com/index.php , exceto que as imagens não carregam porque são feitas com URLs relativos
http://www.example.com/blog/2015/storyname
Quando carrego a raiz do site /index.php, recebo os seguintes cabeçalhos de depuração (veja minha configuração abaixo para saber como eles são gerados)
Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php
Quando carrego /wp-admin/ recebo esses cabeçalhos de volta
Z_LOCATION: PHP MAIN
URI: /blog/wp-admin/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/wp-admin/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/wp-admin/index.php
Quando carrego o blog home /blog/index.php, recebo esses cabeçalhos de volta
Z_LOCATION: PHP MAIN
URI: /blog/index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /blog/index.php
Z_REQUEST_FILENAME: /var/www/hr/blog/index.php
Quando tento carregar este URL http://www.example.com/blog/2015/storyname , recebo os seguintes cabeçalhos de volta. Z_REQUEST_FILENAME (acima) mostra a URL errada sendo carregada.
Z_LOCATION: PHP MAIN
URI: /index.php
Z_DOCUMENT_ROOT: /var/www/hr
Z_FASTCGI_SCRIPT_NAME: /index.php
Z_REQUEST_FILENAME: /var/www/hr/index.php
Não tenho ideia de por que ele tenta carregar o index.php raiz do site quando clico nesse URL. Pistas:
- Alterar a estrutura do permalink do Wordpress de %postname% para ?p=123 corrige o problema
- Nenhuma das outras estruturas de permalink ajuda em nada
Por que isso seria um problema apenas para visualizar os artigos do blog???? Eu me pergunto se é algo a ver com o try_files?
Não há nada no log de erros do hhvm, não há nada no log de erros do nginx. O log de acesso mostra o seguinte quando solicito o último URL
(IP removed) - - [10/Jan/2016:08:22:19 +0000] "GET /blog/2015/storyname HTTP/1.1" 200 4424 "http://www.example.com/blog/" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0" "-" "0.050"
Aqui está a configuração do meu site nginx. Não incluí o nginx.conf principal porque não acho que seja relevante. NB Eu atualizei este trabalho o código de trabalho.
server {
server_name www.example.com;
root /var/www/hr;
access_log /var/log/nginx/hr.access.log main;
# Default location to serve
location / {
try_files $uri $uri/ /blog/index.php?$args;
add_header Z_LOCATION "hr_root"; add_header URI $uri; # DEBUG
}
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
log_not_found off; access_log off;
add_header Z_LOCATION "STATIC RESOURCES REGEX"; add_header URI $uri; # DEBUG
}
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# DEBUGGING
add_header Z_LOCATION "PHP MAIN"; add_header URI $uri;
add_header Z_DOCUMENT_ROOT "$document_root"; add_header Z_FASTCGI_SCRIPT_NAME "$fastcgi_script_name";
add_header Z_REQUEST_FILENAME "$request_filename";
}
}
# Forward non-www requests to www
server {
listen 0;
server_name example.com;
return 302 http://www.example.com$request_uri;
}
Quaisquer pensamentos, ideias ou ajuda são apreciados. Este é bastante encaracolado, para mim, mas suspeito que será uma mudança simples para corrigi-lo.
A entrega de conteúdo do WordPress é realizada pelo
/blog/index.php
script. Presumivelmente, isso é invocado quando você envia o URI/blog/
por causa da$uri/
cláusula emtry_files
. Mas você não tem regras para invocar/blog/index.php
para qualquer outro URI que comece com/blog/...
.Uma opção é tornar o WorkPress o padrão:
Como alternativa, adicione outro bloco de localização para lidar apenas com os URIs que começam com
/blog/...
: