Nginx - wordpress dans un sous-répertoire, quelles données doivent être transmises?

J'ai essayé tellement de choses différentes. Le point où je suis en ce moment est le suivant:

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 ce moment, toutes les ressources pour autant que je sache (images, etc) se chargent correctement. Et http://www.example.com/wordpress charge wordpress, mais une page qui dit "page introuvable". (Wordpress est utilisé pour cela si). Si j'essaie des URL de publication, j'obtiens le même résultat, "page introuvable". Donc, je sais que le problème est que wordpress n'obtient pas les données sur le chemin ou quelque chose. Un autre problème potentiel est que si je cours example.com/wp-admin.php ensuite, il fonctionnera toujours index.php.

Quelles données doivent être transmises? Ce qui peut mal se passer ici?

28
demandé sur Matthew 2011-05-27 20:04:24

3 réponses

Puisque votre alias de localisation correspond à la fin, vous devez simplement utiliser root. En outre, pas Tout est routé par index.php sur WordPress afaik. Aussi, à moins que vous ne sachiez que vous avez besoin d'informations sur le chemin, vous ne le faites probablement pas. Je pense que vous voulez quelque chose comme:

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

Ou si vous avez vraiment besoin d'informations sur le chemin (les URL ressemblent à / 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: mise à jour du premier serveur {} pour supprimer initial / wordpress de l'uri et passer le reste comme q param

EDIT2: les emplacements nommés sont valable uniquement au niveau du serveur

45
répondu kolbyjack 2013-09-24 12:54:26

Mec, cela fonctionnera pour un blog wordpress dans un sous-répertoire du dossier racine 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
répondu Antony Smith 2013-03-26 15:14:59

J'ai eu le même problème et c'est ce qui l'a corrigé pour moi:

  1. Ouvrez le fichier de configuration NGINX pour votre site. À l'intérieur du bloc serveur, ajoutez le chemin d'accès à votre répertoire racine et définissez l'ordre de priorité des fichiers:

    root /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    
  2. Créer un emplacement vide du bloc avant tous vos autres blocs d'emplacement:

    location /latest {
    # Nothing in here; this is to avoid redirecting for this location
    }
    
  3. Recommandez le répertoire racine dans votre emplacement / bloc et ajoutez la redirection pour qu'elle ressemble à ce:

    location / {
    # root   /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    rewrite ^/(.*)$ http://www.domainname.com/latest/$1 redirect;
    }
    
  4. Assurez-vous que votre emplacement ~ .PHP $ block pointe sa racine vers

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

Cela l'a réparé pour moi.

2
répondu NightKnight on Cloudinsidr.com 2014-05-01 20:44:23