fragen stichworte

Übergeben Sie die URL-Komponente / den Pfad mit Nginx an PHP

Ich habe kürzlich von Apache zu Nginx gewechselt. Ich bin ganz neu bei Nginx, also sei bitte nett. Eine meiner Apps verwendet die erste URL-Komponente als Abfragezeichenfolge, sofern der Pfad/die Datei nicht vorhanden ist. In diesem Fall stellt Apache die Datei bereit. Früher würde ich PHP die erste Zeichenfolge im URL-Pfad übergeben, z. B. example.com/foo (wobei foo übergeben wird). Mein alter .htaccess sieht folgendermaßen aus:

<IfModule mod_rewrite.c>

   RewriteEngine On

   RewriteBase/

   # if file or directory exists, serve it   
   RewriteCond %{REQUEST_FILENAME} -f [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule .* - [S=3]
   # if not, pass the url component to PHP as the "section" query string
   RewriteRule ^([^/]+)/?$ ?section=$1 [L]

</IfModule>

Ich habe viele Dinge in Nginx ausprobiert, aber weil ich so neu bin, stecke ich fest. Dies scheint mir am nächsten zu kommen, was ich will:

server {

  root/var/www/mysite.com;

  index index.php;
  server_name www.mysite.com mysite.com;

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }

  location/{
    rewrite ^/(.*)$/index.php?section=$1 break;
    try_files $uri $uri//index.php$args;
  }

}

Die Abfragezeichenfolge scheint jedoch nicht an mein Skript index.php übergeben zu werden.

Ich habe diese anderen Fragen überprüft:

Wenn jemand, der Nginx besser kennt als ich, mir helfen könnte, wäre ich unendlich dankbar.

antworten

Am Ende habe ich einen benannten Ort benutzt. Das funktioniert, aber ich habe immer noch das Gefühl, dass es eine bessere Lösung gibt.

server {

  root/var/www/mysite.com;

  index index.php;
  server_name mysite.com;

  location ~ \\.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }

  location/{
    try_files $uri $uri/@fallback;
  }

  location @fallback {
    rewrite ^/(.*)$/index.php?section=$1 last;
  }

}

Ein nativerer Weg, dies in nginx zu tun, ist:

server {
    root/var/www/mysite.com;
    index index.php;
    server_name example.com;

    location ~ \\.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location/(.*) {
        try_files $uri $uri//index.php?section=$1;
    }