2016-06-02 12 views
1

Ich habe die folgenden Rewrite-Regeln in Sites-available/myapp.conf. Mein Setup ist Nginx, php5-fpm.Rewrite-Regeln funktionieren nicht auf nginx

location/{ 
      try_files $uri $uri/ /index.php; 

      # also tried 
      # try_files $uri $uri/ /index.php$is_args$args; 
      # try_files $uri $uri/ /index.php$args; 

    } 
      # also tried 
      # replacing last with break 

      rewrite "^/([a-zA-Z]+)/?$" "/index.php?lang=$1" last; 
      rewrite "^/([a-zA-Z]+)/([a-zA-Z0-9]+)/?$" "/index.php?lang=$1&page=$2" last; 

    location ~ \.php { 

      try_files $uri =404; 
      fastcgi_split_path_info ^(.+\.php)(/.+)$; 
      include fastcgi_params; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_nam$ 
      fastcgi_param SCRIPT_NAME $fastcgi_script_name; 

      #fastcgi_pass unix:/var/run/php5-fpm.sock; 

      fastcgi_index index.php; 
      fastcgi_pass 127.0.0.1:9000; 
    } 

Ich habe auch versucht, die Rewrite-Regeln in einem @rewrite-Block, aber keinen Erfolg zu wickeln.

location/{ 
    try_files $uri @rewrite; 
} 
location @rewrite { 
    #rewrite rules 
} 

die Variablen manuell Passing funktioniert

index.php?lang=en&page=pageName&type=typeName 

Kann jemand bitte diese lösen. Verbringen Sie die ganze Nacht schon, aber kein Glück.

+1

Können Sie uns erklären, was Art von falschem Verhalten passiert, wenn Sie eine URL laden? –

+0

@Dan Getz Es gibt kein falsches Verhalten oder irgendetwas in den Protokollen. Die Rewrite-Regeln funktionieren einfach nicht – Nitin

Antwort

1

Das Problem scheint zu sein, dass fpm Prozesse noch aktiv oder das folgende Problem verursacht den Fehler waren:

nach jeder Änderung
2016/06/03 02:06:24 [emerg] 6604#6604: bind() to 0.0.0.0:80 failed (98: Address already in use) 
2016/06/03 02:06:24 [emerg] 6604#6604: still could not bind() 

ich neu gestartet nginx mit Erfolg, aber die Rewrite-Regeln nicht funktionieren würde. Verwenden

sudo fuser -k 80/tcp 

löste das Problem. Hoffe, das ist nützlich für jemand anderen.

Wo:

Fixiereinheit - identifizieren Prozesse Dateien oder Sockets

-k Prozesse zu töten Zugriff auf die Datei.

(src: http://geektechinfo.blogspot.nl/2013/09/starting-nginx-nginx-emerg-bind-to.html)

Wenn Fixierer nicht funktioniert, versuchen Sie alle aktiven nginx Prozesse zu töten:

sudo killall -KILL nginx 

und (re) starten nginx:

sudo service nginx restart