【问题标题】:PHP in .HTML pages not parsing on Nginx.HTML 页面中的 PHP 无法在 Nginx 上解析
【发布时间】:2021-07-08 11:48:44
【问题描述】:

我最近将一个站点从 Apache 迁移到 Nginx,现在 html 中的 php 代码无法解析。 .PHP 页面解析没有问题,您可以在本文底部 phpinfo.php 的附加图像输出中看到。

这就是代码在 index.html 等页面中的样子:

<!-- Copyright -->
<? include("includes/copyright.php") ?>

        </body>
</html>

如您所见,没有包装代码的 ,但 Apache 仍然会执行 php 包含,在这种情况下,它会在页面中添加一个带有版权信息的页脚。

同样,这不是一个 .php 文件,而是一个 .html 文件。

如果我将代码包装在 &lt;?php ?&gt; 标记中并将文件从 .html 重命名为 .php,代码将解析,但这不是一个选项,因为该站点有数百个页面并且每个文件都有多个 php 命令比如上面的include。

我已按照许多帖子中的说明进行操作,但仍然无法使其正常工作...如果有人能阐明一下,我将不胜感激,因为我真的不确定还能尝试什么。

/etc/nginx/sites-available/mysite.com.conf

server {
        server_name mysite.com www.mysite.com;
        listen 111.111.11.111;
        root /home/mysite/public_html;
        index index.php index.htm index.html;
        access_log /var/log/virtualmin/mysite.com_access_log;
        error_log /var/log/virtualmin/mysite.com_error_log;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SCRIPT_FILENAME /home/mysite/public_html$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT /home/mysite/public_html;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS $https;

        location ~ \.(php|html)$ {
                try_files $uri $fastcgi_script_name =404;
                fastcgi_pass unix:/var/php-nginx/1618253277225737.sock/socket;

                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;

        }

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        listen 111.111.11.111:443 ssl;
        ssl_certificate /home/mysite/ssl.combined;
        ssl_certificate_key /home/mysite/ssl.key;

.htaccess 来自 Apache 服务器:

AddType application/x-httpd-ea-php56 .html .htm
ErrorDocument 404 /error-page.html 
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript

# BEGIN gzip file compression
# Compress HTML, CSS, JavaScript, Text, XML and fonts
...

【问题讨论】:

  • 这能回答你的问题吗? HTML files as PHP in Nginx
  • 已经试过了。没用。
  • 你在你的htaccess中试过AddHandler php-script .html .htm吗?
  • 这是在 Nginx 而不是 Apache。
  • 你在修改 nginx 配置时是否重启了服务器?

标签: php nginx nginx-config


【解决方案1】:

&lt;? 是一个短开标签。

自 PHP 5.3(自 2009 年起!)支持为 off by default。 (它与其他处理指令冲突,例如 XML 声明)。

您可以使用php.ini 中的short_open_tag 指令将其打开

【讨论】:

  • 这是我在 /etc/php/7.4/cgi/php.ini 上的内容(根据上面 phpinfo.php 的输出,这是我的配置文件所在的位置...见上面的图片附件) ` ; short_open_tag ;默认值:开;开发值:关闭;生产价值:关闭`我继续添加short_open_tag = On然后运行以下内容:sudo systemctl restart php7.4-fpm.servicesudo systemctl restart nginx同样的问题。运气不好!
  • 选项短标签已启用,如您在上面的屏幕截图中所见。还是没有运气!
  • 我很欣赏昆汀提出这个答案,因为它通常是我们必须一直回答的那个。 @Hugo 你的服务器配置错误,但鉴于我们在这里看到的历史,这种情况很少见。以后不要使用 ShortTags,现在默认禁用它们是有原因的。
  • @hppycoder,我相信昆汀的回答是有道理的。我理解使用短开放标签的含义,但不幸的是我继承了这个网站和遗留代码。
【解决方案2】:

你有没有尝试添加

types {
    application/x-httpd-ea-php56 html htm;
}

在位置?

【讨论】:

  • 我的问题出在 Nginx 而不是 Apache。
  • @Hugo 这是 nginx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2014-01-08
  • 2012-08-19
  • 1970-01-01
  • 2017-09-09
  • 2012-01-06
相关资源
最近更新 更多