在Apache中使用PHP-FPM时出现自定义404消息

z9zf31ra  于 2023-02-19  发布在  Apache
关注(0)|答案(3)|浏览(69)

我有Apache(2.2.22 on Debian)配置为通过FastCGI处理PHP文件:
〈文件匹配“.+.php$"〉
设置处理程序应用程序/x-httpd-php

操作应用程序/x-httpd-php /fcgi-bin/php5-fpm虚拟别名
/fcgi-bin/php5-fpm /fcgi-bin-php5-fpm快速计算机外部服务器
/fcgi-bin-php5-fpm -套接字/var/run/php5-fpm.sock -空闲超时600 -通过报头授权
要显示自定义的“找不到文件(HTTP 404)”页,请在Apache中配置如下:
〈目录“/home/http/域/根目录”〉
..
错误文档404/页面不存在
..

不存在的非PHP文件的请求会用自定义的404 pagenotfound.htm文件来响应。
但是对于不存在的PHP文件的请求会用http-status-header“HTTP/1.1 404 Not Found”和内容“File not found."来回答,所以不是我的自定义错误页面。问题!
Apache错误日志显示(在后一种情况下):
[Sat 2015年11月21日14:03:07] [错误] [客户端xx.xxx.xx.xx]快速CGI:服务器“/”错误:主要脚本未知
使用PHP-FPM时,如何为不存在的PHP文件配置自定义404页面?

j2qf4p5b

j2qf4p5b1#

在全局服务器配置或单个虚拟主机中设置“ProxyErrorOverride on”,请参见http://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyerroroverride

ruyhziif

ruyhziif2#

当“文件未找到”显示而不是自定义错误页面不存在.php文件(和所有其他不存在的文件得到正确的自定义错误页面)...
支持PHP 7.2.11文件名:文件/etc/httpd/配置文件
在SetHandler之后添加“ProxyErrorOverride On”

<FilesMatch \.(php|phar)$>
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
    ProxyErrorOverride On
</FilesMatch>

不确定是否需要,但我随后这样做了:

systemctl restart httpd
0qx6xfy6

0qx6xfy63#

选项:代理错误覆盖

如果你可以访问服务器的配置,可以使用ProxyErrorOverride,但是它不能在.htaccess上下文中工作,并且会阻止PHP为所有配置的状态码输出动态响应主体(默认:400599)。

选项:指令(Apache 2.4+) directive (Apache 2.4+)

在调用PHP之前,让Apache检查文件是否存在:

<Files "*.php">
    <If "-e %{REQUEST_FILENAME}">
        # Assuming PHP-FPM over Unix socket via mod_proxy_fcgi.
        SetHandler proxy:unix:/path/to/php-fpm.sock|fcgi://
    </If>
    <Else>
        # Ensure that *.php files are never handled by the default handler.
        Redirect 404
    </Else>
</Files>

文档:,Expression parser,重定向, Expression parser , Redirect

选项:修改_重写

ErrorDocument可使用mod_rewrite触发:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ non-existent

注意:确保文件non-existent不存在。

相关问题