2014-05-14 17 views
6

Ho un sito Laravel in esecuzione su Nginx e va bene.Come installare WordPress a fianco di Laravel su Nginx con i permalink piuttosto (URL SEO-friendly)?

Ha una struttura di cartelle normale come:

/app 
/public 
/vendor 
... 

La cartella /public è dove l'index.php laravel è.

Ho installato WordPress allo /public/blog perché voglio che il mio blog sia visibile allo .

Il blog funziona correttamente se lascio le impostazioni Permalink definite a /blog/wp-admin/options-permalink.php impostate su "Predefinito" (il che significa che gli URL per i post assomigliano a /blog/?p=123). Se cambio le impostazioni Permalink su /blog/%postname%/, non riesco a visualizzare i post (ottengo una pagina Laravel 404).

Voglio assolutamente che i post del mio blog abbiano URL ottimizzati per SEO (piuttosto permalink).

Il mio attuale configurazione Nginx è:

server { 
    #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf and seemed to be necessary to get Laravel working. 
    server_name mysite.local; 

    # The location of our project's public directory. 
    root F:/code/mysite/public/; 

    # Point index to the Laravel front controller. 
    index   index.php; 

    location/{ 
     # URLs to attempt, including pretty ones. 
     try_files $uri $uri/ /index.php?$query_string; 
    } 

    # Remove trailing slash to please routing system. 
    if (!-d $request_filename) { 
      rewrite  ^/(.+)/$ /$1 permanent; 
    } 

    # Yoast WordPress SEO plugin says to add these 2 rewrites: 
    rewrite ^/blog/sitemap_index\.xml$ /blog/index.php?sitemap=1 last; 
    rewrite ^/blog/([^/]+?)-sitemap([0-9]+)?\.xml$ /blog/index.php?sitemap=$1&sitemap_n=$2 last; 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9123 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9123; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 

    location ~* \.(css|js|gif|jpe?g|png)$ { 
     #images, CSS, and JS have 1 week expiration: http://aspyct.org/blog/2012/08/20/setting-up-http-cache-and-gzip-with-nginx/ See also: http://serverfault.com/questions/339240/chromium-audit-says-its-not-caching-static-content-yet-headers-are-set-who-i 
     expires 168h; 
     add_header Pragma public; 
     add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
    } 

} 

Ho trascorso ore rivedere altre risposte (elencati di seguito) e non ho capito come ottenere questo lavoro.

Suggerimenti?

P.S. Sono flessibile con dove installare i file WordPress (ad esempio a /public/blog o spostarlo di un livello a /blog o /wordpress).

+0

Ehi amico, rispondendo qui per la chiamata alle armi :) come discusso sul mio blog in cui hai postato questo link, avete provato a spostare wordpress di un livello e l'aggiunta di una posizione per esso, come descritto qui: http://tom.londondroids.com/2011/11/configuring-nginx-to-serv-multiple-webapps-from-different-directories/? evviva – gru

+0

@gru Grazie mille. Sì, ci avevo provato. Penso che la risposta di Melvyn sotto sembra buona, giusto? Sembra funzionare per me! – Ryan

risposta

16

Si tratta di tutto per laravel nella vostra posizione /, ma è necessario scrivere tutto /blog/ alla index.php in /blog/index.php:

location /blog/ { 
    try_files $uri $uri/ @wordpress; 
} 

location @wordpress { 
    rewrite /blog/ /blog/index.php; 
} 

Allora il vostro gestore PHP ha bisogno di informazioni di percorso di sostegno:

location ^/blog/index.php(/.*)?$ { 
    fastcgi_split_path_info ^(/blog/index.php)(/.*)$; 
    fastcgi_pass 127.0.0.1:9123; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    include fastcgi_param; 
} 

Attiva il controllo del debug per il registro degli errori se questo non funziona e pubblica le informazioni del registro.

UPDATE: Nota del richiedente domanda iniziale:

Ecco un frammento della mia nuova configurazione Nginx, che sembra funzionare per questi URL: /,/blog,/naturalmente,/blog/innato-felice e /blog/sitemap_index.xml

... 
error_log /Users/myuser/code/myproject/storage/logs/nginx_error.log debug; 

# Point index to the Laravel front controller. 
index   index.php; 

location /blog/ { 
    try_files $uri $uri/ @wordpress; 
} 

location @wordpress { 
    rewrite /blog/ /blog/index.php; 
} 

location ^/blog/index.php(/.*)?$ { 
    fastcgi_split_path_info ^(/blog/index.php)(/.*)$; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    include fastcgi_params; 
} 

location/{ 
    try_files $uri $uri/ /index.php$is_args$args; 
} 
... 
+1

Questo esempio ha funzionato per me con un'eccezione principale. La riscrittura distrugge tutti i miei riferimenti css e js. – brs14ku

+0

Ho seguito esattamente gli stessi passaggi ma per qualche ragione, quando vado nella cartella del blog, ricevo l'errore "Troppi rediretti". –

Problemi correlati