Question

Le site basé Zend Framework, je travaille actuellement est en cours de migration vers son serveur de production. Ce serveur se révèle être nginx (surprise!). Naturellement, le site fait comme il a été développé fonctionne pas correctement sur Apache et repose sur un fichier htaccess.

Ma question est ... Quelqu'un at-il une expérience avec cela? Toutes les idées sur la façon de traduire ce que le fichier htaccess fait dans un fichier nginx.conf? Je fais des recherches, mais ce espère que quelqu'un a déjà une expérience avec cela. Merci!

EDIT: Voici le htaccess courant:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
Était-ce utile?

La solution

Je sais qu'il est un fil assez vieux, mais il pourrait aider certaines personnes de toute façon.

Fondamentalement, il redirige toute erreur 404 à index.php, mais si le fichier existe (fichier de type), il établira la racine à droite.

Je l'ai fait à partir du haut de ma tête. Il pourrait ne pas travailler tout de suite, et vous devez mettre le droit chemin et configuration FastCGI. J'ai aussi tout remettrai à index.php comme il devrait fonctionner comme ça avec Zend_Framework

error_page  404 = /index.php;

location / {
    if (-f $request_filename) {
        root   /var/www;
    }
}

location ~ \.php$ {
        fastcgi_pass   unix:/tmp/php.sock;
        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME     /var/www/index.php;
        include /etc/nginx/fastcgi_params;
}

Autres conseils

server {

 listen   80; ## listen for ipv4
 listen   [::]:80 default ipv6only=on; ## listen for ipv6

 server_name  localhost;

 access_log  /var/log/nginx/localhost.access.log;
 error_log  /var/log/nginx/localhost.error.log;

 root   /var/www/localhost/public;

 try_files $uri @php_index;

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location @php_index {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_param  SCRIPT_FILENAME /var/www/localhost/index.php;
  include fastcgi_params;
 }
}

Il est recommandé d'utiliser try_files chaque fois que possible.

Je ne connais pas de manière automatique / systématique pour convertir le htaccess fichier, vous devrez probablement le faire manuellement. wiki Nginx est la meilleure adresse pour la documentation nginx.

Edit: Je suis en cours d'exécution Zend Framework sur Nginx moi-même maintenant et la configuration ressemble à ceci:

server {
  listen 80;
  server_name servername.com;

  root /var/www/zendapp/public;

  location / {
    index index.php;
  }

  # Deny access to sensitive files.
  location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {
    deny all;
  }
  location ~ \.htaccess {
    deny all;
  }

  # Rewrite rule adapted from zendapp/public/.htaccess
  if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
  }

  # PHP scripts will be forwarded to fastcgi processess.
  # Remember that the `fastcgi_pass` directive must specify the same
  # port on which `spawn-fcgi` runs.
  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
  }

  location = /50x.html {
      root   /var/www/default;
  }
}

Comme vous pouvez le voir, la règle de réécriture lui-même est très simple.

est "officiel", simple et fonctionne bien:

http://wiki.nginx.org/Zend_Framework#Time_for_nginx

Pour le serveur mise en scène qui pourrait aider;)

            fastcgi_param APPLICATION_ENV staging;

En fait, je lance un nginx avec un site qui fonctionnent comme Drupal zend framework: un index.php Bootstrap-

est la règle (non testé sur zend framework, juste drupal, mais devrait être similaire)

location / {
            if (!-e $request_filename) {
                    rewrite  ^/(.*)$  /index.php?q=$1  last;
                    break;
        }
    }

error_page  404              /index.php;

Si vous utilisez un sous-répertoire pour votre projet comme http: //some.url/myproject/controller/ , vous devez également ajouter setBaseUrl à votre fichier d'amorçage.

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSomeFancyName()
    {
        $this->bootstrap('frontController');
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->setBaseUrl('/myproject'); // set the base url!
    }
}

La réécriture nginx ressemblerait à ceci:

location /myproject/ {
  if (!-e $request_filename) {
    rewrite ^/myproject/(.*)$ /index.php?$1? last;
  }
}

PS La marque de question typo pas!

S'il était possible, je recommande qu'ils configurer Apache sur un port non standard accessible uniquement dans la zone Nginx et ont proxy Nginx à Apache.

Nginx documentation Proxy

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top