Frage

Die Zend Framework-basierte Website Ich habe jetzt gearbeitet wird, um seinen Produktionsserver migriert. Dieser Server stellt sich heraus, nginx zu sein (Überraschung!). Natürlich ist die Website funktioniert nicht richtig, wie es auf Apache und stützt sich auf eine .htaccess-Datei entwickelt wurde.

Meine Frage ist ... jemand Erfahrung mit diesem haben? Alle Ideen, wie zu übersetzen, was die .htaccess-Datei wird auf eine nginx.conf-Datei? Ich bin der Erforschung dieses aber ich hoffe, dass jemand schon Erfahrung mit diesem hat. Dank!

EDIT: Dies ist die aktuelle .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
War es hilfreich?

Lösung

Ich weiß, es ist ein ziemlich alten Thread, aber es könnte einige Leute helfen sowieso.

Grundsätzlich leitet es automatisch alle 404-Fehler auf index.php, aber wenn die Datei (Typ-Datei) vorhanden ist, wird es die richtige Wurzel gesetzt.

Ich habe es aus der Spitze von meinem Kopf. Es ist vielleicht nicht sofort funktionieren, und Sie haben den richtigen Weg und fastcgi Config zu setzen. Ich habe auch alles index.php zurück, wie es so mit Zend_Framework arbeiten sollte

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

Andere Tipps

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

Es wird empfohlen, try_files zu verwenden, wenn immer es möglich ist.

Ich weiß nicht jeder automatisch / systematisch die .htaccess-Datei zu konvertieren, werden Sie wahrscheinlich es manuell zu tun haben. Die Nginx Wiki ist die beste Ressource für nginx Dokumentation.

Edit: Ich bin mit Zend Framework auf Nginx mich jetzt und die Config sieht wie folgt aus:

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

Wie Sie sehen können, die Rewrite-Regel selbst ist sehr einfach.

Das ist "offizielle", einfach und funktioniert schön:

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

Für Server Staging, die helfen könnten;)

            fastcgi_param APPLICATION_ENV staging;

Eigentlich laufe ich einen nginx mit einer Drupal-Website, die wie Zend Framework arbeiten: eine index.php als Bootstrap

Das ist die Regel (nicht auf Zend Framework getestet, nur auf Drupal, sollte aber ähnlich sein)

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

error_page  404              /index.php;

Wenn Sie ein Unterverzeichnis für Ihr Projekt verwenden, wie http: //some.url/myproject/controller/ , dann müssen Sie auch setBaseUrl in der Bootstrap-Datei.

hinzufügen
<?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!
    }
}

Die nginx Rewrite würde wie folgt aussehen:

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

PS Das Fragezeichen ist nicht Typo!

Wenn es überhaupt möglich wäre, würde ich empfehlen, dass sie Setup Apache auf einem Nicht-Standard-Port nur von der Nginx-Box und Nginx Proxy Apache hat.

Nginx Proxy Dokumentation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top