我有一个主要网站使用WordPress 的供电Nginx(使用 HTTPS https://example.com
)并且我需要将特定路径重定向到另一台服务器,响应子域http://files.example.com
(无 SSL)。
无论我尝试什么,重写或重定向 301,我都会进入 Wordpress 的 404 错误页面。我认为我无法在我的 Nginx 配置中超出 Wordpress 的位置:
server {
listen 443 ssl;
listen [::]:443;
server_name example.com;
root /var/www/wordpress;
index index.php index.html index.htm;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
location / {
try_files $uri $uri/ /index.php?$is_args$args =404;
}
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php break;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass php-wp;
}
location /files {
rewrite ^/files(.*)$ http://files.example.com/files$1 redirect;
}
}
答案1
这个if
区块
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php break;
}
将重写对文件夹中缺少的任何文件的任何请求/var/www/wordpress
到 WordPress index.php
。 完全不需要此if
块,请将其删除。 最后一个参数try_files
指令可以是新的 URI 或 HTTP 错误代码,但您尝试同时使用两者。请将您的根位置块更正为
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
对于重定向,你不需要单独的location
块,只需使用
rewrite ^/files http://files.example.com$request_uri redirect;
对于 HTTP 302 临时重定向或
rewrite ^/files http://files.example.com$request_uri permanent;
用于 HTTP 301 永久重定向。