wake-up-neo.net

Nginx in Unterordner umschreiben (404)

Ich habe einen Site-Host auf einemNGINX-Server, der in der Lage war, index.php in nginx site config mit try_files zu entfernen.

Aber jetzt füge ich ein Blog hinzu, in dem die URL www.foo.com/blog lautet, ich kann auf das Blog zugreifen und index.php?p= verwenden. 

Aber sobald ich pretty permalink mit Nginx Helper www.foo.com/blog/2013/07/bar benutze, bekomme ich 404

server {
  # don't forget to tell on which port this server listens
  listen 80;

  # listen on the www Host
  server_name foo.com;

  # and redirect to the non-www Host (declared below)
  return 301 $scheme://www.ultra-case.com$request_uri;
}

server {
  # listen 80 default_server deferred; # for Linux
  # listen 80 default_server accept_filter=httpready; # for FreeBSD
  listen 80;

  # The Host name to respond to
  server_name www.foo.com;

  # Path for static files
  root /web/foo.com

  #index file
  index index.php;

  #Specify a charset
  charset utf-8;

  # Custom 404 page
  error_page 404 /404.html;

  # Uri Rewrite

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

  location / {
    autoindex on;
    # This is cool because no php is touched for static content.
    # include tihe "?$args" part so non-default permalinks doesn't break when using query string
    try_files $uri $uri/ /index.php?$args;
  }
  location ~ \.php$ {
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
  }

  # Include the component config parts for h5bp
  include conf/h5bp.conf;
}
13
Cauliturtle

Die akzeptierte Antwort leitet alles durch index.php
Dadurch werden bestimmte Skript-Pakete gebrochen, wobei das Skript wp-admin eines davon ist.

Sie können verwenden:

location /blog/ {
    index index.php;
    try_files $uri $uri/ /blog/index.php?$args;
}
35
ereckers

Ähm ... Danke für alle Kommentare und Antworten. Aber schließlich benutze ich diese Methode, damit es funktioniert

location /blog {
    index index.php;
    rewrite ^/blog/(.*)+$ /blog/index.php?$1; # it finally works
    # return 200 $request_uri; # it is for inspect what $request_uri is
    # try_files $uri $uri/ /blog/index.php$request_uri$is_args$args; # it gets 500 server error
}

Bitte weisen Sie darauf hin, wenn die aktuelle Einstellung Probleme aufweist. Danke dir!

15
Cauliturtle

Ich würde folgendes vorschlagen, um eventuelle Permalinks unter Unterordner/Blog einzufangen

location /blog {
    index index.php;
    try_files $uri $uri/ /blog/index.php?$args;
}
5

Versuchen Sie dies, ich habe meine Antwort geändert, um zu versuchen, das gleiche Verhalten nachzuahmen, das Sie in Ihrer Umschreibung verwenden.

location ~ /blog(.*) {
    index index.php;
    try_files $uri /blog/index.php?$1&$args;
}
1

Ich habe festgestellt, dass bei aktiviertem Permalink eine Kombination aus beiden hier angegebenen Antworten erforderlich war, ansonsten

  1. Mit nur dem Umschreiben wurde keine der statischen Dateien geliefert
  2. Nur mit den try-Dateien funktionierten die Permalinks nicht

Dies funktioniert an meinem Setup

location /blog/ {
      rewrite ^/blog/(blog/(tag|category|20??)/.*)+$ /blog/index.php?$1;
      try_files $uri $uri/ /blog/index.php?$args =404;
}
0
paulusm

Eine universelle Lösung für hübsche URLs auf Root- und einer Unterordnerebene:

set $virtualdir "";
set $realdir "";

if ($request_uri ~ ^/([^/]*)/.*$ ) {
        set $virtualdir /$1;
}

if (-d "$document_root$virtualdir") {
        set $realdir "${virtualdir}";
}

location / {
        try_files $uri $uri/ $realdir/index.php?$args;
}
0
amq

Versuche dies

location /api {
    # example: http://demo.com/api/channels/dmzb
    root   /data/webserver/demo.com/api/web;
    rewrite ^/api/(.*) /$1 break;
    try_files $uri $uri/ /api/index.php?$args;

    location ~ ^/api/index\.php {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;

        # fix request_uri
        set $changed_request_uri $request_uri;
        if ($changed_request_uri ~ ^/api(.*)) {
            set $changed_request_uri $1;
        }
        fastcgi_param REQUEST_URI $changed_request_uri;

        # fix script_filename
        fastcgi_split_path_info ^(?:\/api\/)(.+\.php)(.*);
        fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }
}
0
jk2K

Denken Sie für PHP, umschreiben ist nicht mit etwas wie folgt erforderlich:

location /app/ {
  include fastcgi_params;
  fastcgi_param  SCRIPT_FILENAME /path/to/your/app/index.php;
  fastcgi_pass php;
}

Mit folgendem fastcgi-Pass

upstream php {
    server unix:/var/run/php5-fpm.sock;
}
0
Jesús Germade