我刚刚从 Apache 迁移到 Nginx,并尝试设置重写规则。我有一个虚拟主机,这是虚拟主机的结构
/var/www/name-of-virtual-host/
├── wp1
│ ├── wp-admin
│ ├── wp-content
│ └── wp-includes
└── wp2
├── wp-admin
├── wp-content
└── wp-includes
如您所见,我在不同的文件夹中安装了 2 个不同的 WordPress。因此,我尝试创建重写规则来处理这两个 WordPress。
这是我的位置定义:
location / {
try_files @missing $uri;
}
location @missing {
rewrite ^/([a-z-])(/.*)$ /$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/帖子永久链接/它应该使用/wp1/index.php而如果/wp2/帖子永久链接/它应该使用/wp2/index.php。
但我越来越重写或内部重定向循环,同时内部重定向至错误。
我如何编写重写规则以供多个 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
答案1
你的try_files
顺序错误?也许这就是导致您头痛和陷入无限循环的原因,因为文件@missing
确实从您的文件系统中丢失了,而重定向回$uri
确实会导致无限循环?
-try_files @missing $uri;
+try_files $uri @missing;
尽管如此,如果您只有两个 WordPress 网站,我认为更好的方法可能是简单地进行一点复制粘贴,而不是每次都尝试调用正则表达式。
例如,与尝试进行大量重写和多次重定向相比,以下做法可能更好:
location /wp1 {
try_files $uri /wp1/index.php;
}
location /wp2 {
try_files $uri /wp2/index.php;
}
答案2
这立即引起了我的注意:
rewrite ^/([a-z-])(/.*)$ /$1/index.php last;
$1
在这种情况下只匹配一个字符。
不过我不会进一步修复这个问题。与其重新发明轮子,不如从推荐的配置开始。否则会有太多陷阱和教训需要学习。 http://codex.wordpress.org/Nginx