nginx 提供 php 脚本,而不是执行

nginx 提供 php 脚本,而不是执行

我有一个网站,最近从 Cold Fusion 迁移到 Wordpress。为了确保旧链接仍然有效,我们的开发人员编写了一个重定向脚本,将旧 URL 转换为新 URL。

我设置了一个虚拟重定向,但由于某种原因,旧式 URL(例如 'www.mysite.com/page.cfm?___BIG_NASTY_STRING')被发送到 php 脚本的文本或尝试实际下载文件 - 它没有执行。

这是我的配置文件的相关部分:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTP_HOST $host;
    include fastcgi_params;
    }

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found on;
    }

#Redirects for old CFML-style links

location /page.cfm {
    alias /legacy/redirect.php;
}

有人知道如何让redirect.php 执行而不是仅仅显示或下载吗?

谢谢!

答案1

这是您的问题:

location /page.cfm {
    alias /legacy/redirect.php;
}

这不是重定向。你只是要求 nginx 提供该文件,它确实做到了。

在这种情况下,您需要一个内部重写,它将重新启动使用您想要提供的 PHP 文件的请求处理。rewrite指令用于此目的。例如:

location /page.cfm {
    rewrite . /legacy/redirect.php last;
}

相关内容