Come abilito gli URL puliti con Nginx?


9

Sto usando Drupal 7.x. Ho realizzato per farlo funzionare senza URL puliti.

Indagando, ho capito che dovrei creare un vhost per ogni sito di drupal e abilitare URL puliti con il seguente codice.

if (-e $ REQUEST_FILENAME) {
     rewrite ^ / (. *) $ / index.php? q = $ 1 last;
}

In alternativa, potrei usare questo codice.

location / {
         [... ]
         error_page 404 = @ drupal;
         [... ]
}

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

Tuttavia, ho anche visto che senza creare un vhost è possibile abilitare URL puliti (come Apache). Ho provato su entrambe le linee nella mia configurazione ma non ottengo un risultato. Quando abilito gli URL puliti, viene sempre visualizzata la parola Nginx (The localhost).

Qual è il modo giusto per abilitare gli URL puliti?

Questa è la mia configurazione in / etc / nginx / sites-available / default.

server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /doc/ {
                alias /usr/share/doc/;
                autoindex on;
                allow 127.0.0.1;
                deny all;
        }

        location /images {
                root /usr/share;
                autoindex off;
        }
        # Only for nginx-naxsi : process denied requests
        #location /RequestDenied {
                # For example, return an error code
                #return 418;
        #}

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/www;
        }

        #Pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                try_files $uri =404;
                #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

                # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/tmp/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
                deny all;
        }
}

Non ho creato alcun vhost sul mio server; né so come.


1
Hai visto / provato quanto segue, dai documenti Drupal? drupal.org/node/976392
geerlingguy

@geerlingguy Sì. Questa parte del codice che ho aggiunto al mio file predefinito è disponibile nel sito e, quando accedo al mio sito, viene visualizzato l'errore 500. O devo creare un vhost?
Eduardo,

1
Dai un'occhiata a github.com/perusio/drupal-with-nginx . Ha tutte le opzioni di configurazione di cui probabilmente avrai bisogno per far funzionare Drupal su un server Nginx.
Jamestsymp,

Risposte:


11

Ho il prossimo che funziona con successo:

  location / {
    index index.php;
    # This is cool because no php is touched for static content
    try_files $uri $uri/ @rewrite;
    expires max;
  }

  location @rewrite {
    # Some modules enforce no slash (/) at the end of the URL
    # Else this rewrite block wouldn't be needed (GlobalRedirect)
    rewrite ^/(.*)$ /index.php?q=$1;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /srv/www/www.example.com/public_html$fastcgi_script_name;
    fastcgi_intercept_errors on;
    fastcgi_pass unix:/var/run/php-fpm.sock; # fastcgi_pass unix:/tmp/php5-fpm.sock;
 }

ho aggiunto @rewritee location @rewrite{}nel mio file /etc/nginx/sites-available/defaulte riavviato nginx ma non funziona per il mio. Quando abilito cleans url, visualizza localhost.
Eduardo,

2Eduardo: vuoi dire che site.com/index.php funziona e aprire la prima pagina per te?
Nikit,

Sì. Riesco a visualizzare la prima pagina. Ma no le altre pagine
Eduardo,

hmm, puoi incollare di nuovo il tuo codice?
Nikit,

funziona bene per me
maleducato
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.