2014-05-14 11 views
6

Ich habe eine Laravel-Site, die auf Nginx läuft, und es ist in Ordnung.Wie installiert man WordPress neben Laravel auf Nginx mit hübschen Permalinks (SEO-freundliche URLs)?

Es hat eine normale Ordnerstruktur wie:

/app 
/public 
/vendor 
... 

Der /public Ordner ist, wo die Laravel index.php ist.

Ich habe WordPress unter /public/blog installiert, weil ich möchte, dass mein Blog unter mywebsite.org/blog sichtbar ist.

Der Blog funktioniert derzeit gut, wenn ich die auf /blog/wp-admin/options-permalink.php definierten Permalink-Einstellungen auf "Standard" belassen habe (was bedeutet, dass die URLs für Beiträge wie /blog/?p=123 aussehen). Wenn ich Permalink Einstellungen zu /blog/%postname%/ ändere, kann ich die Beiträge nicht sehen (Ich bekomme eine Laravel 404 Seite).

Ich möchte auf jeden Fall meine Blog-Posts SEO-freundliche URLs haben (hübsche Permalinks).

Mein aktueller Nginx config:

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

} 

ich Stunden bewerten den anderen Antworten verbracht haben (siehe unten) und haben nicht herausgefunden, wie diese Funktion zu erhalten.

Vorschläge?

P. S. Ich bin flexibel mit, wo ich die WordPress-Dateien installieren würde (z. B. entweder unter /public/blog oder verschieben Sie es um eine Ebene auf /blog oder /wordpress).

+0

hey Kumpel, beantworten hier, um Ihren Ruf zu den Waffen :) als auf meinem Blog diskutiert, wo Sie diesen Link gepostet, haben Sie Wordpress auf einer Ebene versucht bewegen und das Hinzufügen einer Position für es, wie hier beschrieben: http://tom.londondroids.com/2011/11/configuring-nginx-to-serve-multiple-webapps-from-different-directories/? Prost – gru

+0

@gru Vielen Dank. Ja, ich habe es versucht. Ich denke, Melvyns Antwort unten sieht gut aus, oder? Es scheint für mich zu funktionieren! – Ryan

Antwort

16

Sie Route alles Laravel in Ihrem / Lage, aber Sie brauchen, um alles zu schreiben /blog/ auf die index.php in /blog/index.php:

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

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

dann Ihre PHP-Handler muss Pfad Info-Unterstützung:

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

Aktivieren Sie die Debug-Ausführlichkeit für das Fehlerprotokoll, falls dies nicht funktioniert, und geben Sie die Protokollinformationen an.

UPDATE: Hinweis von der ursprünglichen Frage Fragesteller:

Hier ein Ausschnitt aus meinem neuen Nginx Config ist, die für diese URLs scheint zu funktionieren: /,/Blog,/natürlich/Blog/angeboren-happy und /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; 
} 
... 
+0

Danke! Alles scheint zu funktionieren! Ich denke, vielleicht https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf war in erster Linie keine gute Idee; Ich benutzte https://www.digitalcocean.com/community/articles/how-to-install-laravel-mit-nginx-on-an-ubuntu-12-04-lts-vps als Beispiel. Ich werde sehen, ob ich meiner Antwort den 'git diff' hinzufügen kann, damit die Leute genau wissen, was ich geändert habe, damit es funktioniert. Hinweis: Entfernen Sie 'debug ', wenn Sie den Test abgeschlossen haben und bereit für die Bereitstellung in der Produktion sind. – Ryan

+1

Dieses Beispiel funktionierte für mich mit einer großen Ausnahme. Das Neuschreiben zerstört alle meine CSS- und JS-Referenzen. – brs14ku

+0

Ich folgte exakt den gleichen Schritten, aber aus irgendeinem Grund, wenn ich in den Blog-Ordner gehe, bekomme ich "Too Many Redirects" -Fehler. –

Verwandte Themen