Nginx HHVM WordPress con PHP Execution in una sottodirectory intermedia

Ho una strana situazione con uno dei miei siti web, ancora in fase di sviluppo in AWS. Ho nginx 1.9.9 con HHVM 3.6.6-1.amzn1.x86_64 su un t2.micro. Non è accessibile al pubblico.

Ho un sito web scritto personalizzato nella radice del dominio, ho WordPress nella directory / blog e wordpress admin è in / blog / wp-admin. Il sito personalizzato presenta vari file tra cui index.php. WordPress ha index.php e tutti i tipi di altre cose nella directory del blog, wp-admin utilizza anche index.php.

Posso caricare il sito personalizzato, funziona perfettamente. WordPresss admin funziona completamente. La home page di blog di WordPress / elenco di storia funziona completamente. Il problema è quando faccio clic su uno dei collegamenti di articolo del blog per visualizzarlo in pieno mostra l'indice di home page personalizzato. Quindi, per dire un altro modo

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 faccio clic sul collegamento della storia, ottengo lo stesso contenuto della pagina come se avessi fatto clic su http://www.example.com/index.php, salvo che le immagini non si caricano finché vengono eseguite con gli URL relativi

 http://www.example.com/blog/2015/storyname 

Quando carichi il root del sito /index.php ricevi le seguenti intestazioni di debug (vedi la mia configuration di seguito per come vengono generati)

 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 cargo / wp-admin / otterò queste intestazioni

 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 carichi il blog home /blog/index.php otterò queste intestazioni

 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 provo a caricare questo URL http://www.example.com/blog/2015/storyname riceverò le seguenti intestazioni. Z_REQUEST_FILENAME (sopra) mostra l'URL errato che viene caricato.

 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 

Non ho idea di come provare a caricare l'index.php di root del sito quando faccio clic su quel URL. indizi:

  • La modifica della struttura dei permessi di WordPress da% postname% a? P = 123 corregge il problema
  • Nessuna delle altre strutture permalink aiuta affatto

Perché questo sarebbe un problema solo per la visualizzazione di articoli blog ???? Mi chiedo se sia qualcosa a che fare con i try_files?

Non c'è nulla nel registro degli errori hhvm, non c'è nulla nel log errore di nginx. Il registro di accesso mostra quanto segue quando richiesto l'ultimo 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" 

Ecco il mio config del sito nginx. Non ho incluso il principale nginx.conf poiché non credo sia pertinente. NB Ho aggiornato questo lavoro il codice di lavoro.

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

Qualsiasi pensiero, idee o aiuto apprezzati. Questo è abbastanza riccio per me, ma sospetto che sarà un semplice cambiamento per risolverlo.

  • Pagina vuota: wordpress su nginx + php-fpm
  • Escludendo / incluse le tabelle in mysqldump AWS
  • Ridondanza per i siti di WordPress
  • Redirect tutti gli URL alla root tranne / wp-admin e wp-json
  • Riscrivi l'URL sul sito Wordpress personalizzato
  • Strani scansioni dai robot
  • Sincronizzazione di più server wordpress web in una farm
  • 504 Gateway Time-Out dopo la pubblicazione su una piattaforma Nginx-Apache-WordPress
  • One Solution collect form web for “Nginx HHVM WordPress con PHP Execution in una sottodirectory intermedia”

    La consegna dei contenuti WordPress è eseguita dallo script /blog/index.php . Presumibilmente, questo viene invocato quando la tua invio dell'URI /blog/ causa della $uri/ clause in try_files . Ma non hai regole per invocare /blog/index.php per qualsiasi altro URI che inizia con /blog/...

    Un'opzione è quella di rendere WorkPress l'impostazione predefinita:

     location / { try_files $uri $uri/ /blog/index.php?$args; ... } 

    In alternativa, aggiungi un altro block di località per gestire solo gli URI che iniziano con /blog/... :

     location /blog { try_files $uri $uri/ /blog/index.php?$args; ... } 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.