Nginx-wordpress en un subdirectorio, ¿qué datos deben pasarse?


He intentado muchas cosas diferentes. El punto en el que estoy ahora mismo es este:

location ^~ /wordpress {
    alias /var/www/example.com/wordpress;
    index index.php index.html index.htm;
    try_files $uri $uri/ /wordpress/index.php;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_split_path_info ^(/wordpress)(/.*)$;
        fastcgi_param SCRIPT_FILENAME /var/www/example.com/wordpress/index.php;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

En este momento, todos los recursos que puedo decir (imágenes, etc.) se están cargando correctamente. Y http://www.example.com/wordpress carga wordpress, pero una página que dice "página no encontrada". (Wordpress está en uso para esto). Si intento cualquier url de post obtengo el mismo resultado, "página no encontrada". Así que sé que el problema es que Wordpress no está obteniendo los datos sobre la ruta o algo así. Otro problema potencial es que si corro example.com/wp-admin.php entonces seguirá funcionando index.php.

¿Qué datos deben transmitirse? ¿Qué puede estar pasando aquí?

Author: Matthew, 2011-05-27

3 answers

Dado que su alias de ubicación final coincide, solo debe usar root. Además, no todo está enrutado a través de index.php en wordpress afaik. Además, a menos que sepa que necesita información de ruta, probablemente no. Creo que quieres algo como:

location @wp {
  rewrite ^/wordpress(.*) /wordpress/index.php?q=$1;
}

location ^~ /wordpress {
    root /var/www/example.com;
    index index.php index.html index.htm;
    try_files $uri $uri/ @wp;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass 127.0.0.1:9000;
    }
}

O si realmente necesita información de ruta (las url se parecen a /wordpress/index.php/foo/bar):

location ^~ /wordpress {
    root /var/www/example.com;
    index index.php index.html index.htm;
    try_files $uri $uri/ /wordpress/index.php;

    location ~ \.php {
        fastcgi_split_path_info ^(.*\.php)(.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_pass 127.0.0.1:9000;
    }
}

EDITAR: Actualizado primer servidor{} para quitar inicial / wordpress de uri y pasar el resto como q param

EDIT2: Las ubicaciones nombradas son solo válido a nivel de servidor

 45
Author: kolbyjack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-24 12:54:26

Amigo, esto funcionará para un blog de wordpress en un subdirectorio de la carpeta raíz de magento!

server {
listen 80;
server_name my-site.co.uk;
rewrite / $scheme://www.$host$request_uri permanent; ## Forcibly prepend a www
}

server {
listen 80 default;
client_max_body_size 8M;
## SSL directives might go here
server_name www.my-site.co.uk; ## Domain is here twice so server_name_in_redirect will favour the www
root /var/www/my-site/magento;

location / {
    index index.html index.php; ## Allow a static html file to be shown first
   try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
   expires 30d; ## Assume all files are cachable
}

location  /wordpress {
          index index.php index.html index.htm;
         try_files $uri $uri/ /wordpress/index.php;
         }

## These locations would be hidden by .htaccess normally
location ^~ /app/                { deny all; }
location ^~ /includes/           { deny all; }
location ^~ /lib/                { deny all; }
location ^~ /media/downloadable/ { deny all; }
location ^~ /pkginfo/            { deny all; }
location ^~ /report/config.xml   { deny all; }
location ^~ /var/                { deny all; }

location /var/export/ { ## Allow admins only to view export folder
    auth_basic           "Restricted"; ## Message shown in login window
    auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
    autoindex            on;
}

location  /. { ## Disable .htaccess and other hidden files
    return 404;
}


location @handler { ## Magento uses a common front handler
    rewrite / /index.php;
}

location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
    rewrite ^(.*.php)/ $1 last;
}

location ~ .php$ { ## Execute PHP scripts
    if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss

    expires        off; ## Do not cache dynamic content
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_param  HTTPS $fastcgi_https;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
    fastcgi_param  MAGE_RUN_TYPE store;
    include        fastcgi_params; ## See /etc/nginx/fastcgi_params
}

}

 13
Author: Antony Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-26 15:14:59

Tuve el mismo problema y esto es lo que lo solucionó para mí:

  1. Abra el archivo de configuración de NGINX para su sitio. Dentro del bloque servidor, agregue la ruta a su directorio raíz y establezca el orden de prioridad para los archivos:

    root /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    
  2. Crea un bloque de ubicación vacío antes de todos tus otros bloques de ubicación:

    location /latest {
    # Nothing in here; this is to avoid redirecting for this location
    }
    
  3. Elogie el directorio raíz en su ubicación / bloque y agregue la redirección para que se vea como esto:

    location / {
    # root   /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    rewrite ^/(.*)$ http://www.domainname.com/latest/$1 redirect;
    }
    
  4. Asegúrese de que su ubicación ~ .php block block apunta su raíz a

    root /mnt/www/www.domainname.com;
    

Esto lo arregló para mí.

 2
Author: NightKnight on Cloudinsidr.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-01 20:44:23