Apache和php-fpm不适用于带有正斜杠的脚本名称

时间:2019-02-26 18:43:08

标签: php apache fpm

将一个网站移到另一台服务器后,我遇到了问题。旧版本没有使用php-fpm,新版本没有使用php-fpm,到目前为止,在迁移其他网站时我没有任何与此相关的问题。

这一点是,它使用怪异的方式来实现符号链接。看看.htaccess中发生了什么:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

index.php爆炸PATH_INFO以获取所需的参数:

$url_elements = explode('/', $_SERVER['PATH_INFO']);

主页工作正常。无效的是所有子页面。我在前面得到了找不到文件。,并且 AH01071:在日志中从php-fpm中得到了错误“主脚本未知\ n”

我的想法是,发生这种情况是因为php-fpm获取带有正斜杠的文件名并将其视为路径。

这是Apache用于通过php-fpm处理PHP文件的配置:

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

我不能重写此网站的代码以更好地使用友好的URL,因为该网站只是用于SEO的一小页,公司现在不允许在此浪费时间。< / p>

如果有人愿意为我提供针对这些错误的简单修复方法,我会非常高兴。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

请尝试启用AllowOverride All<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>

sudo systemctl stop apache2

完成后,使用命令sudo systemctl start apache2和{{1}}重新启动apache2服务