Mod rewrite 转换和NginX服务器的ExpressionEngine重写规则

Mod rewrite 转换和NginX服务器的ExpressionEngine重写规则,mod-rewrite,url-rewriting,nginx,expressionengine,Mod Rewrite,Url Rewriting,Nginx,Expressionengine,我正在尝试将一个可工作的ExpressionEngine安装从Apache环境迁移到另一个机器上的NginX环境。我在尝试将一些.htaccess重写转换为NginX时遇到了一个问题 该网站使用so,因此每增加一种语言都需要自定义重写规则 这是我的标准vhost配置,它似乎可以让ExpressionEngine很好地工作(没有多语言模块): 上面的工作似乎很好,我希望它做什么。多语言模块文档基于Apache设置。对于每种附加语言,它都需要一个带有自己的htaccess重写规则的目录—有点像这样:

我正在尝试将一个可工作的ExpressionEngine安装从Apache环境迁移到另一个机器上的NginX环境。我在尝试将一些
.htaccess
重写转换为NginX时遇到了一个问题

该网站使用so,因此每增加一种语言都需要自定义重写规则

这是我的标准vhost配置,它似乎可以让ExpressionEngine很好地工作(没有多语言模块):

上面的工作似乎很好,我希望它做什么。多语言模块文档基于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 {
  if (!-e $request_filename) {
    rewrite ^/de/(.*)$ /de/index.php/$1 last;
  }
}
我通过添加以下内容重新创建了上述规则:

location /de {
  index     index.php;
  if (!-e $request_filename) {
    rewrite ^/(.*)$ /de/index.php/$1 last;
  }
}
当我尝试访问
http://www.domain.co.uk/de/my_page

所以,我想这可能与
fcgi_param脚本文件名
有关,所以我将其更改为:(在路径末尾添加了
de

现在,当我访问
http://www.domain.co.uk/de/my_page


我现在处于困境,所以我真的在帮助社区,所以社区可以帮助我。你还没有让我失望:)。

我可以回答我自己的问题。看起来我的语言重写规则有点错误。应该是这样的:

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 {
  if (!-e $request_filename) {
    rewrite ^/de/(.*)$ /de/index.php/$1 last;
  }
}

应该是直截了当的,在默认语言的nginx站点配置文件中,您可以执行以下操作:

location / {
  try_files $uri $uri/ /index.php?q=$uri&$args;
}
对于其他语言支持(如de/da/fr/etc):

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