Mod rewrite 转换和NginX服务器的ExpressionEngine重写规则
我正在尝试将一个可工作的ExpressionEngine安装从Apache环境迁移到另一个机器上的NginX环境。我在尝试将一些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重写规则的目录—有点像这样:
.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;
}