nginx:重写 PHP 不起作用

nginx:重写 PHP 不起作用

我已经安装了后缀代理,并且正在使用以下带有通配符子域 DNS 的重写:

location / {
     if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php last;
        break;
     }
}

我的后缀代理具有以下 URL 格式: (子域和/或域 + 域扩展到代理).proxy.org/(request-uri 到代理)

我的 index.php 中有这个 php 代码:

if(preg_match('#([\w\.-]+)\.example\.com(.+)#', $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'], $match)) {
    header('Location: http://example.com/browse.php?u=http://'.$match[1].$match[2]);
    die;
}

但是当请求带有 .php 扩展名的页面时,我会收到 404 未找到错误:

http://www.php.net.proxy.org/docs.php - HTTP/1.1 404 Not Found
http://www.utexas.edu.proxy.org/learn/php/ex3.php - HTTP/1.1 404 Not Found

但其他一切都正常(index.php 也正常):

http://php.net.proxy.org/index.php - HTTP/1.1 200 OK
http://www.php-scripts.com.proxy.org/php_diary/example2.php3 - HTTP/1.1 200 OK
http://www.utexas.edu.proxy.org/learn/php/ex3.phps - HTTP/1.1 200 OK
http://www.w3schools.com.proxy.org/html/default.asp - HTTP/1.1 200 OK

有人有答案吗?我不知道为什么它不起作用,在 Apache 上它运行良好。

提前致谢。

我已经删除了该位置,现在它运行正常:

if (!-e $request_filename) {
     rewrite ^(.*)$ /index.php last;
     break;
}

答案1

我无法完全理解您的问题。但是,看起来您可能想在位置块中添加 try_files,如下所示...

地点 / {
     如果(!-e $请求文件名){
        最后重写^(.*)$ /index.php;
        休息;
     }

     尝试文件$uri =404;
}

我希望这有帮助。

相关内容