Comment installer WordPress aux côtés de Laravel sur Nginx avec de jolis permaliens (URL compatibles SEO)?

J’ai un site Laravel en cours d’exécution sur Nginx, et ça va.

Il a une structure de dossier normale comme:

/app /public /vendor ... 

Le dossier /public est l’emplacement où se trouve l’index.php Laravel.

J’ai installé WordPress sur /public/blog car je souhaite que mon blog soit visible sur mywebsite.org/blog .

Le blog fonctionne /blog/wp-admin/options-permalink.php si je laisse les parameters Permalink définis dans /blog/wp-admin/options-permalink.php définis sur “Default” (ce qui signifie que les URL des messages ressemblent à /blog/?p=123 ). Si je change les parameters Permalink à /blog/%postname%/ , je ne peux pas voir les messages (je reçois une page Laravel 404).

Je veux vraiment que mes articles de blog aient des URLs compatibles SEO (des liens assez clairs).

Ma configuration Nginx actuelle est:

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

J’ai passé des heures à examiner d’autres réponses (répertoriées ci-dessous) et je n’ai pas trouvé comment faire fonctionner ce système.

Suggestions?

  • https://stackoverflow.com/a/10089936/470749
  • https://stackoverflow.com/a/18596822/470749
  • https://stackoverflow.com/a/17816122/470749
  • https://stackoverflow.com/a/12635095/470749
  • https://stackoverflow.com/a/11522602/470749
  • https://stackoverflow.com/a/6155935/470749
  • https://stackoverflow.com/a/23416206/470749
  • http://codex.wordpress.org/Nginx#WordPress_Multisite_Subdirectory_rules
  • http://codex.wordpress.org/Giving_WordPress_Its_Own_Directory
  • https://rtcamp.com/wordpress-nginx/tutorials/multisite/subdirectories/in-a-subdirectory/

PS Je suis flexible avec l’endroit où j’installe les fichiers WordPress (par exemple soit sur /public/blog soit sur /blog ou /wordpress ).

Vous acheminez tout à Laravel dans votre / lieu, mais vous devez tout écrire /blog/ sur index.php dans /blog/index.php :

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

Ensuite, votre gestionnaire php a besoin de la prise en charge des informations de chemin:

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

Activez la procédure de débogage pour le journal des erreurs si cela ne fonctionne pas et publiez les informations du journal.

MISE À JOUR: Note de l’auteur de la question originale:

Voici un extrait de ma nouvelle configuration Nginx, qui semble fonctionner pour ces URL: /, / blog, / course, / blog / innately-happy et /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; } ...