重写或内部redirect周期,同时内部redirectNginx的错误

我只是从Apache迁移到Nginx并尝试设置重写规则。 我有一个虚拟主机,这是虚拟主机的结构

/var/www/name-of-virtual-host/ ├── wp1 │  ├── wp-admin │  ├── wp-content │  └── wp-includes └── wp2 ├── wp-admin ├── wp-content └── wp-includes 

正如你所看到的,我在不同的文件夹中有2个不同的WordPress安装 所以我试图创build一个重写规则来处理这两个WP。

这是我的位置定义:

  location / { try_files @missing $uri; } location @missing { rewrite ^/([az-])(/.*)$ /$1/index.php last; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } 

如果URI是/ wp1 / permalink-post /它应该使用/wp1/index.php ,如果/ wp2 / permalink-post /它应该使用/wp2/index.php

但是我得到重写或内部redirect周期,而内部redirect到错误。

我怎样才能编写我的重写规则来使用多个WP安装?

更新1

例如WordPress .htaccess文件:

 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wp1/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wp1/index.php [L] </IfModule> # END WordPress 

是不是你的try_files在错误的顺序? 也许这就是导致你头痛和无休止的循环的原因,因为你的文件系统中确实没有文件@missing ,并且redirect到$uri确实会导致无限循环吗?

 -try_files @missing $uri; +try_files $uri @missing; 

尽pipe如此,如果你只有两个WordPress站点,我认为一个更好的方法可能是简单地复制一些粘贴,而不是试图每次都调用正则expression式。

例如,可能会比尝试做大量的重写和多重redirect更好:

 location /wp1 { try_files $uri /wp1/index.php; } location /wp2 { try_files $uri /wp2/index.php; } 

这直接引起了我的注意:

 rewrite ^/([az-])(/.*)$ /$1/index.php last; 

在这种情况下$1只匹配一个字符。

我不打算进一步修复这个问题。 而不是重新发明轮子,你应该从推荐的configuration开始。 有太多的陷阱和经验教训,否则学习。 http://codex.wordpress.org/Nginx