我有一个Joomla网站,我想从Apache服务器迁移到Nginx。我的网站有3种语言,所有网址都以/en
,/ua
或/ru
开头。启用SEF URL并在Apache上完美运行。
网站文件夹有.htaccess文件,其中(据我所知)最重要的指令是:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
DirectoryIndex index.php index.html
Options +FollowSymLinks
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]
RewriteRule ^(.*) index.php
RewriteCond %{HTTP:Authorization} !^$
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>
我使用了http://winginx.com/en/htaccess转换器,并将其结果放入/etc/nginx/site-available/domain.com
文件:
index index.php index.html;
autoindex off;
location / {
if ($http_host ~* "^www.domain.com$") {
rewrite ^(.*)$ http://domain.com/$1 redirect;
}
if (-e $request_filename) {
rewrite ^/(.*) /index.php;
}
}
然后我读了一本手册(https://docs.joomla.org/Enabling_Search_Engine_Friendly_%28SEF%29_URLs#Nginx),但try_files $uri $uri/ /index.php?q=$request_uri;
和expires 1d; try_files $uri $uri/ /index.php?$args;
也没有帮助我。
如果我尝试使用前一段中的指令在我的浏览器中打开网站,我会遇到504(网关超时)错误; error.log包含下一个错误:
*1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 176.***.**.***, server: domain.com, request: "GET /en/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "domain.com"
如果我不使用它并只使用从.htaccess转换的指令,那么我有500(内部服务器)错误,error.log包含下一个内容:
*1 rewrite or internal redirection cycle while internally redirecting to "/ru/", client: 176.***.**.***, server: domain.com, request: "GET /ru/ HTTP/1.1", host: "domain.com"
我尝试谷歌解决方案一整天,但我想我无法在没有专家帮助的情况下解决这个问题:(
同样在Joomla控制面板中,我发现&#34; SEF URL在Apache和IIS7&#34;上正常工作,并且没有关于Nginx的信息。虽然在docs.joomla.org有一个解决方案,但它没有工作或我做错了什么= /
请。救命啊!