2010-02-14 5 views
0

Apache 환경에서 작동하는 ExpressionEngine 설치를 다른 상자의 NginX 환경으로 마이그레이션하려고합니다. 일부 .htaccess을 NginX로 다시 변환하려고하면 문제가 발생했습니다.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; 
    } 
} 

는 위의 잘 작동하는 것 같다 내가가 원하는 것을한다. Multi Language Module 문서는 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; 
    } 
} 

위의 추가 더 저를 얻을 수 없다 내가 시도하고 http://www.domain.co.uk/de/my_page을 방문하면 404 오류 페이지보다.

그래서, 어쩌면 이것이 fcgi_param SCRIPT FILENAME 함께 할 수있는 뭔가 생각 했어요 그래서 변경 것과 : 나는 http://www.domain.co.uk/de/my_page를 방문 할 때

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

지금 이렇게 나에게 No input file specified 오류를 제공 (경로의 끝 de 추가) .

저는 지금 벽돌 벽에 서있어서 SO 커뮤니티가 나를 도울 수 있도록 도와줍니다. 아직 나를 실망시키지 않았다.

답변

1

나는 내 자신의 질문에 대답 할 수있다. 언어 재 작성 규칙이 약간 잘못된 것처럼 보입니다. 다른 언어 지원에 대한

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

(예를 들어 드/다/FR : 아래처럼 뭔가를 할

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

는 정직 할 경우, 기본 언어의 nginx 사이트 설정 파일 : 다음과 같이한다인가/etc) :

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