Làm cách nào để bật URL sạch với Nginx?


9

Tôi đang sử dụng Drupal 7.x. Tôi đã đạt được để làm cho nó hoạt động mà không cần URL sạch.

Điều tra, tôi đã hiểu rằng tôi nên tạo một vhost cho mỗi trang web drupal và kích hoạt các URL sạch với mã sau đây.

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

Ngoài ra, tôi có thể sử dụng mã này.

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

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

Tuy nhiên, tôi cũng thấy rằng không cần tạo vhost có thể kích hoạt các URL sạch (như Apache). Tôi đã thử trên cả hai dòng trong thiết lập của mình nhưng tôi không nhận được kết quả. Khi tôi bật URL sạch, nó luôn hiển thị từ Nginx (Localhost).

Cách đúng để kích hoạt URL sạch là gì?

Đây là cấu hình của tôi trong / etc / nginx / site-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;
        }
}

Tôi chưa tạo bất kỳ vhost nào trên máy chủ của mình; tôi cũng không biết làm thế nào


1
Bạn đã thấy / đã thử những điều sau đây, từ các tài liệu Drupal chưa? drupal.org/node/976392
ge Muffguy

@ge Muffguy Có. Phần mã này tôi đã thêm vào tệp mặc định của mình trong trang web có sẵn và khi tôi vào trang web của mình, tôi gặp lỗi 500. Hoặc tôi cần tạo một vhost?
Eduardo

1
Hãy xem github.com/perusio/drupal-with-nginx . Nó có tất cả các tùy chọn cấu hình mà bạn có thể cần để Drupal chạy trên máy chủ Nginx.
jamestsymp

Câu trả lời:


11

Tôi có công việc tiếp theo thành công:

  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;
 }

tôi đã thêm @rewritelocation @rewrite{}trong tập tin của mình /etc/nginx/sites-available/defaultvà khởi động lại nginx nhưng không hoạt động cho tôi. Khi tôi kích hoạt url sạch, hiển thị localhost.
Eduardo

2Eduardo: vậy ý ​​bạn là site.com/index.php đang hoạt động và mở trang nhất cho bạn?
Nikit

Đúng. Tôi có thể xem Trang trước .. Nhưng không có trang nào khác
Eduardo

hmm, bạn có thể pastebin mã của bạn một lần nữa?
Nikit

hoạt động tốt với tôi
thô lỗ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.