2010-02-14 2 views
0

Я пытаюсь перенести рабочую установку ExpressionEngine из среды Apache в среду NginX в другую коробку. Я столкнулся с проблемой, пытаясь конвертировать некоторые перезаписываемые файлы в NginX .htaccess.Преобразование правила перезаписи ExpressionEngine для сервера NginX

Сайт использует multi language module, поэтому для каждого дополнительного языка требуется настраиваемое правило перезаписи.

Это мой стандартный ВХост конфигурации, который, кажется, чтобы получить ExpressionEngine работает хорошо (без модуля нескольких языков):

server { 
    listen  80; 
    server_name domain.co.uk www.domain.co.uk; 
    root   /var/www/vhosts/domain.co.uk/http; 

    # Redirects non-www to www 
    if ($host = 'domain.co.uk') { 
    rewrite ^/(.*) http://www.domain.co.uk/$1 permanent; 
    } 

    access_log /var/www/vhosts/domain.co.uk/log/access.log; 
    error_log  /var/www/vhosts/domain.co.uk/log/error.log; 

    location/{ 
    index  index.html index.htm index.php; 
    # Removes index.php from URLs 
    if (!-e $request_filename) { 
     rewrite ^/(.*)$ /index.php/$1 last; 
    } 
    } 

    # Standard pass for all PHP files 
    location ~ \.php$ { 
    include  fastcgi_params; 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME /var/www/vhosts/domain.co.uk/http$fastcgi_script_name; 
    } 

    # This is where all the ExpressionEngine magic happens 
    location ~ \.php($|/) { 
    include  fastcgi_params; 
    fastcgi_pass 127.0.0.1:9000; 

    set   $script $uri; 
    set   $path_info ""; 

    if ($uri ~ "^(.+\.php)(/.+)") { 
     set   $script $1; 
     set   $path_info $2; 
    } 

    fastcgi_param SCRIPT_FILENAME /var/www/vhosts/domain.co.uk/http$script; 
    fastcgi_param SCRIPT_NAME $script; 
    fastcgi_param PATH_INFO $path_info; 
    } 
} 

выше, кажется, работает хорошо, и делает то, что я хочу его. Документация на нескольких языках основана на установке Apache. Для каждого дополнительного языка требует каталог с его правилом собственный Htaccess переписать - немного как это:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.domain\.co\.uk$ 
RewriteRule (.*) http://www.domain.co.uk/ar/$1 [R=301,L] 

# Remove index.php 
RewriteCond $1 !^(index\.php) [NC] 
RewriteRule ^(.*)$ /de/index.php/$1 [L] 

Я воссоздал вышеуказанное правило, добавив:

location /de { 
    index  index.php; 
    if (!-e $request_filename) { 
    rewrite ^/(.*)$ /de/index.php/$1 last; 
    } 
} 

Добавление вышеперечисленного не получает меня никаких дальнейших чем страница ошибки 404, когда я пытаюсь посетить http://www.domain.co.uk/de/my_page.

Итак, я полагал, что, возможно, это было что-то делать с fcgi_param SCRIPT FILENAME поэтому я изменил, что: (добавлено de до конца пути)

fastcgi_param SCRIPT_FILENAME /var/www/vhosts/spectrumhealthcare.co.uk/http/de$script; 

Делать это теперь дает мне ошибку No input file specified, когда я посещаю http://www.domain.co.uk/de/my_page ,

Я как бы на кирпичной стене, так что действительно помогая мне, сообщество SO может мне помочь. Вы еще не подвели меня :).

ответ

1

Я могу ответить на свой вопрос. Похоже, я неправильно сформулировал правило перезаписи языка. Является ли должен выглядеть следующим образом:

location /de { 
    if (!-e $request_filename) { 
    rewrite ^/de/(.*)$ /de/index.php/$1 last; 
    } 
} 
0

Должно быть прямо вперед, в Nginx сайте конфигурационный файл для языка по умолчанию вы делаете что-то, как показано ниже:

location/{ 
    try_files $uri $uri/ /index.php?q=$uri&$args; 
} 

Для другой языковой поддержки (скажем, де/да/фр/etc):

location /de { 
    try_files $uri $uri/ /de/index.php?q=$uri&$args; 
} 
Смежные вопросы