Nginx:在Symfony2应用程序的子文件夹中运行wordpress

时间:2016-01-02 18:00:12

标签: php wordpress symfony nginx

我使用nginx运行Symfony2应用程序,并希望将wordpress安装集成到公共Web文件夹的子文件夹中。

示例:

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

使用Symfony应用程序的原始nginx配置,我可以成功地向wordpress的起始页面以及包括插件安装在内的整个管理区域发出请求。

但是,因为我配置了wordpress以使用自定义网址方案"年/月/标题"对于帖子,请求最终在404中。我想,不是wordpress是获取请求的应用程序,而是symfony,它当然不知道该怎么做。 wordpress为帖子创建的网址是正确的(例如http://www.example.com/magazin/2015/12/my-interesing-post)。

是否有可能扩展nginx配置以处理特定文件夹下的所有请求" / magazin /"如果是的话,怎么样?

这是我的nginx配置,目前只处理Symfony2应用程序:

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

3 个答案:

答案 0 :(得分:3)

延伸到malcolms解释,这应该做的工作:

(如果您的日志说明了默认nginx目录的路径,那么您只需要再次定义根目录)

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

此外,我不太确定,但我建议在任何其他可以获取此路线的位置块之前插入此位置块(location / magazin和之后的位置/)。

答案 1 :(得分:2)

如果您正在使用php7的symfony2,您可以尝试以下配置:

server {
  listen    *:80;
  server_name www.example.com;
  root /var/www/example.com/web/;
  index index.php index.html index.htm;
  access_log off;

  location @rewriteapp {
       rewrite ^(.*)$ /app.php/$1 last;
  }

  location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
       expires max;
       try_files $uri =404;
  }

  location / {
      index app.php;
      try_files $uri @rewriteapp;
  }

  # BLOG AREA START
  location @rewriteblog {
       rewrite ^(.*)$ /blog/index.php?q=$uri&$args;
  }

  location @rewriteblogadmin {
       rewrite ^(.*)$ /blog/wp-admin/index.php?q=$uri&$args;
  }

  location = /blog/favicon.ico {
      log_not_found off;
      access_log off;
  }

  location = /blog/robots.txt {
      allow all;
      log_not_found off;
      access_log off;
  }

  location /blog {
      # This is cool because no php is touched for static content.
      # include the "?$args" part so non-default permalinks doesn't break when using query string
      try_files $uri @rewriteblog;
  }

  location /blog/wp-admin {
      # This is cool because no php is touched for static content.
      # include the "?$args" part so non-default permalinks doesn't break when using query string
      try_files $uri @rewriteblogadmin;
  }

  # BLOG
  location ~ ^/(blog|blog\/wp-admin)/(.*)\.php(/|$) {
      try_files $uri =404;
      fastcgi_index index.php;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      include fastcgi_params;

      fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
      fastcgi_param DOCUMENT_ROOT $realpath_root;

      fastcgi_intercept_errors on;
      fastcgi_buffers 16 16k;
      fastcgi_buffer_size 32k;
  }

  # PROD
  # This rule should only be placed on your development environment
  # In production, don't include this and don't deploy app_dev.php or config.php
  location ~ ^/(app|config)\.php(/|$) {
      fastcgi_index app.php;
      fastcgi_pass unix:/run/php/php7.0-fpm.sock;
      fastcgi_split_path_info ^(.+\.php)(/.*)$;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
      fastcgi_param DOCUMENT_ROOT $realpath_root;
  }

  # return 404 for all other php files not matching the front controller
  # this prevents access to other php files you don't want to be accessible.
  location ~ \.php$ {
        return 404;
  }

  error_log /var/log/nginx/examplecom_error.log;
  access_log /var/log/nginx/examplecom_access.log;
}

答案 2 :(得分:1)

您可以在子文件夹中添加location

location /magazin {
    index index.php;
    try_files $uri $uri/ /magazin/index.php?q=$uri;
}