0

動作中のExpressionEngineインストールをApache環境から別のボックスのNginX環境に移行しようとしています。いくつかの.htaccess書き換えをNginXに変換しようとすると問題が発生しました。

このサイトは多言語モジュールを使用しているため、追加の言語ごとにカスタムの書き換えルールが必要です。

これは、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コミュニティを本当に助けることが私を助けることができます。あなたはまだ私を失望させていません:)。

4

2 に答える 2

1

私は自分の質問に答えることができます。言語の書き換えルールが少し間違っていたようです。次のようになります。

location /de {
  if (!-e $request_filename) {
    rewrite ^/de/(.*)$ /de/index.php/$1 last;
  }
}
于 2010-02-14T19:20:03.273 に答える
0

簡単なはずです。デフォルト言語のnginxサイト設定ファイルで次のようにします。

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

他の言語サポート(たとえばde / da / fr /など)の場合:

location /de {
  try_files $uri $uri/ /de/index.php?q=$uri&$args;
}
于 2014-06-11T12:42:45.090 に答える