Apache

Apache

Ich habe versucht, diese htaccess-Regeln in nginx zu konvertieren:

Apache

# Necessary to prevent problems when using a controller named "index" and having a root index.php
# more here: http://httpd.apache.org/docs/2.2/content-negotiation.html
Options -MultiViews

# Activates URL rewriting (like myproject.com/controller/action/1/2/3)
RewriteEngine On

# Disallows others to look directly into /public/ folder
Options -Indexes

# When using the script within a sub-folder, put this path here, like /mysubfolder/
# If your app is in the root of your web folder, then leave it commented out
RewriteBase /php-mvc/

# General rewrite rules
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

nginx

server {
    listen  80;
    listen  [::]:80 default_server ipv6only=on;

    root /home/goggelz/www;
    server_name localhost;
    rewrite_log on;

    location / {
        index index.php;
    }

    location /php-mvc {
        if (!-d $request_filename){
            set $rule_0 1$rule_0;
        }
        if (!-f $request_filename){
            set $rule_0 2$rule_0;
        }
        if (!-e $request_filename){
            set $rule_0 3$rule_0;
        }
        if ($rule_0 = "321"){
            rewrite^/(.+)$ /php-mvc/index.php?url=$1 last; 
        }

    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;

    }
}

Die Sache ist, ich möchte die Umschreibungen nur im Ordner /home/goggelz/www/php-mvc verwenden, und ein weiteres Problem: Wenn ich versuche, localhost zu öffnen, wird die Datei index.php heruntergeladen, aber wenn ich versuche, eine Verbindung mit 127.0.0.1 herzustellen, wird die Datei index.php ausgeführt. Wie kann ich diese Probleme beheben?

Antwort1

Dies ist eine Version, die die Nginx- try_filesDirektive verwendet.

server {
    listen  80;
    listen  [::]:80 default_server ipv6only=on;

    root /home/goggelz/www;
    server_name localhost;
    rewrite_log on;

    index index.php;

    location /php-mvc {
        try_files $uri $uri/ @mvcrewrite;
    }

    location @mvcrewrite {
        rewrite ^ /php-mvc/index.php?url=$request_uri last; 
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Hier try_fileswird zunächst geprüft, ob die angeforderte URI als Datei oder Verzeichnis vorhanden ist. Wenn dies der Fall ist, wird sie gesendet. Wenn dies nicht der Fall ist, wird die Anforderung an den @mvcrewriteBlock weitergeleitet, wo die Anforderung neu geschrieben wird, um die URI an die index.php zu übergeben.

Dies könnte auch das Problem beim Öffnen des lokalen Hosts beheben.

verwandte Informationen