2013-08-15 30 views
11

Tôi đang cố gắng thiết lập Moodle 2.3 (không 2.5) ver với nginx xây dựng mới nhất. Có một số lời khuyên trên trang web này trước đây. Một trong số họ: Moodle 2.0 with Nginx backend.Moodle 2.3 với Nginx vs đối số gạch chéo viết lại

Dường như ai cũng biết, Moodle đang sử dụng quy tắc path_info để đăng URL giống như sau: http://example.com/moodle/pluginfile.php/26/mod_scorm/content/1/index.html. Để thoát khỏi cơn ác mộng này, Moodle đang đề nghị vô hiệu hóa "Slash arguments" trong UI. Điều đó thật tuyệt. Nhưng không phải cho người chơi SCORM đang buộc "Slash đối số" mặc dù tùy chọn trước đó. Vì vậy, với vô hiệu hóa "Slash đối số" tất cả mọi thứ đang làm việc và bình thường. Nhưng mục tiêu duy nhất của tôi là sử dụng máy nghe nhạc SCORM.

tôi cố gắng sử dụng các quy tắc viết lại từ liên kết ở trên:

rewrite ^(.*\.php)(/)(.*)$ $1?file=/$3 last; 

mà không hoạt động trong 2,3-2,5 ver. Tôi giả sử nó hoạt động trong 1,9. Bây giờ Moodle đang sử dụng con đường khác nhau:

http://example.com/moodle/pluginfile.php/26/mod_scorm/content/1/index.html

Một số quy tắc nginx:

location ^~ /moodle { 
    location ~* ^.+\.(?:css|js|htc|xml|jpe?g|gif|png|ico|bmp|svg|swf|pdf|docx?|xlsx?|tiff?|txt|rtf|cgi|bat|pl|dll|aspx?|class|otf|ttf|woff|eot|less)$ { 
     add_header Access-Control-Allow-Origin *; 
     access_log off; 
     expires 30d; 
     tcp_nodelay off; 
     try_files $uri =404; 
    } 
    location ~* ^/moodle/.*\.php$ { 
     include  includes/fastcgi_params.conf; 
     try_files $uri @dynamic; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_param PATH_INFO  $fastcgi_path_info; 
     fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 
     fastcgi_read_timeout 1200; 
     fastcgi_keep_conn on; 
     fastcgi_pass 127.0.0.1:9090; 

    } 
    rewrite (^.*\.php)(/.*) $1 last; 
} 

Xin cho biết làm thế nào để giải quyết việc này.

+0

Bạn nên đặt các giải pháp như câu trả lời cho câu hỏi của riêng bạn và chấp nhận nó. –

+1

Ngoài ra, bạn có thể vui lòng đăng toàn bộ tệp cấu hình nginx của mình không? Điều đó sẽ rất hữu ích. Cảm ơn! –

Trả lời

2

(.. Giải đáp của OP trong một câu hỏi chỉnh sửa chuyển đổi sang một câu trả lời cộng đồng wiki Xem Question with no answers, but issue solved in the comments (or extended in chat))

Các OP đã viết:

tôi giải quyết này bằng cách đặt chỉ viết lại trong {server} không {location} phần. Trong kịch bản moodle của tôi được cài đặt trong thư mục con: example.com/moodle.

server { 
    server_name example.com www.example.com; 
    rewrite ^/moodle/(.*\.php)(/)(.*)$ /moodle/$1?file=/$3 last; 

    location ^~ /moodle { 
    try_files $uri $uri/ /index.php?q=$request_uri; 
    index index.php index.html index.htm; 

    location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass 127.0.0.1:9090; 
    include  includes/fastcgi_params.conf; 
     } 
     } 
     } 
+0

Giả sử rằng tất cả các URL chứa '.php /' được viết lại bằng cách sử dụng '? File =' là sai và có thể dẫn đến các sự cố trong quá trình theo dõi! Sẽ an toàn hơn khi tạo các kết quả phù hợp cụ thể hơn trên 'pluginfile.php /', v.v ... – FMCorz