Я пытаюсь перенести рабочую установку 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 может мне помочь. Вы еще не подвели меня :).