2016-07-20 18 views
2

ich diese Konfigurationsdatei ohne Umschreiben bekommen habennginx Fehler 500 mit Schrägstrich in Rewrite-Mechanismus (Import von Apache)

server { 
listen 80; 
listen [::]:80; 

root /var/www/testhop.com/www; 
index index.php index.html index.htm; 

server_name testhop.com; 

location/{ 
    try_files $uri $uri/ =404; 
} 

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
    } 
} 

Ich habe einige Code für die Herstellung von Umschreiben gefunden:

try_files $uri $uri/ /index.php?q=$uri&$args; 

Ich habe änderte es zur endgültigen Form von:

server { 
(...) 

location/{ 
    try_files $uri $uri/ /index.php/$uri&$args; 
} 

location ~ \.php$ { 
(...) 
} 

Aber diese Konfiguration gibt mir den Fehler 500. Meine ursprüngliche Apache Rewrite ist:

RewriteRule ^(.*)$ /index.php/$1 [L] 

Wie machen es funktioniert im Format index.php/url-params ?

Antwort

0

Ihr location ~ \.php$ Block akzeptiert URIs, die mit .php enden (ohne die Abfragezeichenfolge). Durch Hinzufügen eines / nach dem .php fügen Sie Pfadinfo hinzu.

Mit the documentation dies sollte für Sie arbeiten:

location ~ [^/]\.php(/|$) { 
    fastcgi_split_path_info ^(.+?\.php)(/.*)$; 
    if (!-f $document_root$fastcgi_script_name) { 
     return 404; 
    } 

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

    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param HTTP_PROXY ""; 
} 

Die location Regex geändert wurde URIs mit Pfadinformationen zu akzeptieren. Die try_files Direktive wurde durch eine evil if ersetzt, da die URI zuerst geteilt werden muss, bevor sie auf Dateiexistenz getestet wird.

Ich möchte die include Anweisung vor jeder fastcgi_param Anweisung platzieren, um zu vermeiden, dass die letztere stillschweigend überschrieben wird.