2013-08-15 13 views
11

Próbuję ustawić Moodle 2.3 (nie 2.5) ver z najnowszą kompilacją nginx. Wcześniej było kilka porad na tej stronie. Jeden z nich: Moodle 2.0 with Nginx backend.Moodle 2.3 z Nginx vs argument przemiany

Najwyraźniej jak wiadomo, Moodle stosuje reguły path_info, aby opublikować URL w następujący sposób: http://example.com/moodle/pluginfile.php/26/mod_scorm/content/1/index.html. Aby uciec od tego koszmaru, Moodle proponuje wyłączenie "argumentów Slasha" w interfejsie użytkownika. Który jest świetny. Ale nie dla gracza SCORM, który wymusza "Slash argument" pomimo poprzedniej opcji. Tak więc przy wyłączonych "argumentach Slasha" wszystko działa normalnie. Ale moim jedynym celem jest użycie odtwarzacza SCORM.

Próbowałem użyć reguły przepisywania z linku powyżej:

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

który nie pracuje w 2,3-2,5 ver. Zakładam, że działało w wersji 1.9. Teraz Moodle wykorzystuje inną drogę:

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

niektóre z zasad 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; 
} 

Proszę doradzić, jak rozwiązać ten problem.

+0

Należy umieścić rozwiązanie jako odpowiedź na swoje pytanie i przyjmuję je. –

+1

Ponadto, czy mógłbyś opublikować swój cały plik konfiguracyjny nginx? Byłoby to bardzo pomocne. Dzięki! –

Odpowiedz

2

(.. Odpowiedział PO w edycji zapytania przerobiony na odpowiedź Wiki Zobacz Question with no answers, but issue solved in the comments (or extended in chat))

PO napisał:

Rozwiązałem to przez wprowadzenie dyrektywy przepisywania w {server} nie {location} Sekcja. W moim scenariuszu moodle jest instalowany w podfolderze: 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

Założenie, że wszystkie adresy URL zawierające '.php /' są przepisane przy użyciu '? File =', jest nieprawidłowe i może prowadzić do problemów w dół ścieżki! Bezpieczniej jest tworzyć bardziej szczegółowe dopasowania w 'pluginfile.php /', etc ... – FMCorz