itinance itinance - 1 month ago 6
PHP Question

Nginx: running wordpress in subfolder of a Symfony2 app

I run a Symfony2 app with nginx and want to integrate a wordpress installation in a subfolder of the public web-folder.

Example:

http://www.example.com -> Symfony 2
http://www.example.com/magazin -> Wordpress


With the origin nginx configuration of the Symfony app i can sucessfully make requests to the start-page of wordpress and also the whole admin-area including plugin installation and so on.

But since i configured wordpress to use a custom url scheme "year/month/title" for the posts, the request ends up in a 404. I figured out, that not wordpress is the application who gets the request, but symfony, which certainly doesnt know what to do here. The URL that wordpress creates for a post, is correct (e.g. http://www.example.com/magazin/2015/12/my-interesing-post).

Is it possible, to extend the nginx configuration in a way to handle all requests below the specific folder "/magazin/" and if so, how?

This is my nginx configuration, which currently handles only the Symfony2 application:

server {
listen *:80;
server_name www.example.de;


index app.php index.php index.html;

access_log /var/log/nginx/www.example.de.access.log combined;
error_log /var/log/nginx/www.example.de.error.log;

location ~ \.php$ {

root /data/www/www.example.de/current/web;
include /etc/nginx/fastcgi_params;
try_files $uri $uri/ /app.php?$query_string;

fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index app_prod.php;
fastcgi_param X_FORWARD_PORT "80";
fastcgi_param CUSTOMER_ENV customer_default;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
}

location / {

root /data/www/www.example.de/current/web;
index app.php index.php index.html;
try_files $uri $uri/ /app.php?$query_string;
}
}

Answer

Extending to malcolms explanation, this should do the work:

(If your log says that the path of the default nginx dir is prepended, you just have to define the root directory again)

location /magazin {
    root      /data/www/www.example.de/current/web;
    index     index.php;
    try_files $uri $uri/ /magazin/index.php?q=$uri;
}

Additionally, I'm not pretty sure but I would suggest to insert this location block before any other location block that could fetch this route (location /magazin and afterwards location /).

Comments