![nginx:重写 PHP 不起作用](https://linux22.com/image/587970/nginx%EF%BC%9A%E9%87%8D%E5%86%99%20PHP%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我已经安装了后缀代理,并且正在使用以下带有通配符子域 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; }
我希望这有帮助。