2011-05-27 11 views
21

He intentado tantas cosas diferentes. El punto que estoy en este momento es la siguiente:Nginx - wordpress en un subdirectorio, ¿qué datos se deben pasar?

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 en la medida de lo que puedo decir (imágenes, etc) 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 pruebo cualquier url de publicación obtengo el mismo resultado, "página no encontrada". Entonces sé que el problema es que wordpress no está obteniendo los datos sobre la ruta o algo así. Otro problema potencial es que si ejecuto example.com/wp-admin.php, seguirá ejecutándose index.php.

¿Qué datos se deben pasar? ¿Qué puede estar yendo mal aquí?

Respuesta

39

Dado que su alias de coincidencia de ubicación coincide, debería simplemente usar la raíz. Además, no todo se enruta 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 usted realmente no necesita información de la ruta (URL parecen /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; 
    } 
} 

EDIT: Actualización primer servidor {} para despojar inicial/wordpress de uri y pasar resto como parámetro q

Edit2: ubicaciones con nombre sólo son válidos a nivel de servidor

+0

Intento eso (el primero) pero sigo obteniendo la página 404 wordpress no encontrada. Podría tener que ver conmigo al mover el blog de un dominio diferente a un dominio con un subdirectorio. – Matthew

+0

Creo que tal vez wordpress necesita el inicial/wordpress stripped. Editó el primer servidor para hacer eso. – kolbyjack

+4

¡Esa es la respuesta definitiva! He utilizado la primera solución con 'location/wordpress' en lugar de 'location^~/wordpress' y 'alias' en lugar de 'root'. – micred

12

Tío, esto funcionará para un blog de WordPress en un subdirectorio de la carpeta raíz 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 
} 

}

+0

Si alguien quiere el archivo de configuración central que estoy usando para Nginx con esta configuración de sitio solo hágamelo saber. –

+0

funciona para mí, no estoy usando Magento, pero ese bloque para WordPress es útil. thx – risnandar

+0

¡Me gusta! Muy simple y directo, esa parte wordpress y funcionó perfectamente para mi sitio. ¡Encontré el ejemplo en codex.wordress.com muy complejo! –

1

que tenían el mismo problema y esto es lo que lo fijó para mí:

  1. Abrir el archivo de configuración de Nginx para su sitio. En el interior del bloque de servidor, agregue la ruta de acceso al directorio raíz y establecer el orden de prioridad de los archivos:

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

    location /latest { 
    # Nothing in here; this is to avoid redirecting for this location 
    } 
    
  3. Elogiar a cabo en el directorio raíz de su ubicación/bloque y añadir la redirección por lo que se ve así:

    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 ~ bloque .php $ señala su raíz a

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

Esto lo fijó para mí.

Cuestiones relacionadas