这是我的 vhost 文件:
<VirtualHost *:80>
ServerName awesome.dev
## Vhost docroot
DocumentRoot "/var/www/awesome"
## Directories, there should at least be a declaration for /var/www/awesome
<Directory "/var/www/awesome">
Options Indexes FollowSymLinks MultiViews
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>
## Logging
ErrorLog "/var/log/apache2/w0JhArMoDehc_error.log"
ServerSignature Off
CustomLog "/var/log/apache2/w0JhArMoDehc_access.log" combined
## Server aliases
ServerAlias www.awesome.dev
## SetEnv/SetEnvIf for environment variables
SetEnv APP_ENV dev
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/awesome/$1
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我正在尝试捕获对不存在的 *.php 文件的所有请求。
例如,如果/var/www/awesome/index.php存在,我去http://foo.com/index.php我得到正确的响应,但如果/var/www/awesome/foo.php不存在,我去http://foo.com/foo.php,我只是得到回应File not found.。
该.htaccess文件未被读取,因为 Apache 将所有内容都交给 PHP-FPM。
我需要捕获所有 404 请求并显示一个常见的错误页面,就像您通常在任何站点上看到的那样。
但是,由于 Apache 将所有内容都交给 php-fpm,因此它似乎无法正确处理这些错误。
小智 5
对于今天阅读的人来说,这是正确的答案,感谢 Tito1337 的回答。
ProxyErrorOverride如果您在代码中设置 404 或处理某些错误,可能会给您带来问题或破坏您的应用程序,并且实现起来更加复杂。
php-fpm相反,您应该仅在文件存在时才将请求传递给。如果该文件不存在,Apache 将定向到您定义的ErrorDocument. 您可以在 Apache 配置中的 PHP 处理程序周围添加此检查。
CentOS 8 的示例:
#
# Redirect to local php-fpm (no mod_php in default configuration)
#
<IfModule !mod_php5.c>
<IfModule !mod_php7.c>
# Enable http authorization headers
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
<FilesMatch \.(php|phar)$>
# NEW ADDITION - CHECK IF FILE EXISTS FIRST
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</If>
</FilesMatch>
</IfModule>
</IfModule>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3534 次 |
| 最近记录: |