2013-08-15 3 views
11

Я пытаюсь установить Moodle 2.3 (не 2.5) ver с последней версией nginx. Раньше были некоторые советы на этом сайте. Один из них: Moodle 2.0 with Nginx backend.Moodle 2.3 с Nginx vs slash аргумент rewrite

По-видимому, как известно, Moodle использует правила path_info, чтобы опубликовать URL-адрес следующим образом: http://example.com/moodle/pluginfile.php/26/mod_scorm/content/1/index.html. Чтобы избежать всего этого кошмара, Moodle предлагает отключить «Слэш-аргументы» в пользовательском интерфейсе. Это здорово. Но не для SCORM-плеера, который форсирует «Slash argument», несмотря на предыдущий вариант. Таким образом, с отключенными «аргументами слэш» все работает и работает нормально. Но моя единственная цель - использовать SCORM-плеер.

Я пытался использовать правила перезаписи из приведенной выше ссылке:

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

который не работает в 2,3-2,5 версии. Я предполагаю, что он работал в 1.9. Теперь Moodle использует другой путь:

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

Некоторые из правил 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; 
} 

Пожалуйста, посоветуйте, как решить эту проблему.

+0

Вы должны поставить решение в ответ на свой вопрос и принять его. –

+1

Кроме того, не могли бы вы разместить весь файл конфигурации nginx? Это было бы очень полезно. Благодаря! –

ответ

2

(.. Ответил ФП в вопросе редактирования конвертируется в сообщество вики ответа См Question with no answers, but issue solved in the comments (or extended in chat))

ОП писал:

Я решил эту проблему, поставив директиву перепишем в {server} не {location} раздел. В моем сценарии moodle устанавливается под вложенной папкой: 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

Предполагая, что все URL-адреса, содержащие '.php /', переписываются с использованием '? File =', являются неправильными и могут привести к проблемам с дорожки! Безопаснее создавать более конкретные совпадения на 'pluginfile.php /' и т. Д. ... – FMCorz