Apache和php fpm没有';不适用于带有正斜杠的脚本名称
我在将一个网站移动到另一个服务器后遇到问题。旧的一个没有使用php fpm,新的一个使用,到目前为止,我在迁移其他网站时没有遇到任何与此相关的问题 这一个的问题是,它使用奇怪的方式来实现符号链接。查看.htaccess中发生的情况:Apache和php fpm没有';不适用于带有正斜杠的脚本名称,php,apache,fpm,Php,Apache,Fpm,我在将一个网站移动到另一个服务器后遇到问题。旧的一个没有使用php fpm,新的一个使用,到目前为止,我在迁移其他网站时没有遇到任何与此相关的问题 这一个的问题是,它使用奇怪的方式来实现符号链接。查看.htaccess中发生的情况: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] index.php分解路径信息以获取所需参数:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
index.php分解路径信息以获取所需参数:
$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>
#如果mod_php不可用,则重定向到本地php fpm
#启用http授权头
SetEnvIfNoCase^ Authorization$“(.+)”HTTP_Authorization=$1
SetHandler“proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
#默认情况下拒绝访问原始php源代码
#要重新启用,建议启用对文件的访问
#仅在特定虚拟主机或目录中
要求全部拒绝
#拒绝访问没有文件名的文件(例如.php)
要求全部拒绝
我负担不起重写这个网站的代码以更好的方式创建友好的URL,因为这个网站只是一个用于SEO目的的小页面,公司现在不允许在这方面浪费时间
如果有人能为这些错误提供一个简单的解决方案,我会非常高兴
提前谢谢你 请尝试启用
FollowSymLinks
和AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
选项索引跟随符号链接
允许超越所有
要求所有授权
完成后,使用命令
sudo systemctl stop apache2
和sudo systemctl start apache2
重新启动apache2服务。您的旧.conf
在那里了吗?