2010-02-14 8 views
0

J'essaie de faire migrer une installation ExpressionEngine en cours de fonctionnement d'un environnement Apache vers un environnement NginX dans une autre zone. J'ai rencontré un problème en essayant de convertir certaines réécrits .htaccess à NginX.Conversion d'une règle de réécriture ExpressionEngine pour un serveur NginX

Le site utilise le multi language module et nécessite donc une règle de réécriture personnalisée pour chaque langue supplémentaire.

Voici ma config standard vhost qui semble se ExpressionEngine bien travailler (sans le module multi-langue):

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; 
    } 
} 

Ce qui précède semble fonctionner très bien et fait ce que je veux. La documentation du module multilingue est basée sur une configuration Apache. Pour chaque langue supplémentaire, il a besoin d'un répertoire avec sa propre règle de réécriture htaccess - un peu comme ceci: j'ai

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] 

recréée la règle ci-dessus en ajoutant:

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

Ajout du me passe au-dessus pas plus loin qu'une page d'erreur 404 lorsque j'essaie de visiter le http://www.domain.co.uk/de/my_page.

Alors, je me suis peut-être c'était quelque chose à voir avec le fcgi_param SCRIPT FILENAME donc je changé que pour: (ajouté de à la fin du chemin)

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

Faire cela me donne maintenant une erreur No input file specified quand je visite http://www.domain.co.uk/de/my_page .

Je suis un peu sur un mur de briques maintenant si vraiment aider la communauté SO peut m'aider. Tu ne m'as pas encore laissé tomber :).

Répondre

1

Je peux répondre à ma propre question. On dirait que j'ai eu la règle de réécriture de la langue légèrement faux. Est-ce devrait ressembler à ceci:

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

devrait être simple, dans le fichier de configuration du site nginx pour la langue par défaut vous faites quelque chose comme ci-dessous:

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

Pour un autre support linguistique (par exemple de/da/fr/etc):

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