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 :).