0

我通过 nginx 将 html 从 Intranet 传递到 Internet。我想对 html 文件进行一些转换。我在我的 nginx.conf 中使用了这样的片段

    location /news/ {
            proxy_pass      http://news.intranet/$request_uri;
            proxy_set_header Host news.intranet;
            xslt_types text/html;
            xslt_stylesheet /var/www/www/style-news.xsl;
    }

但如果 html 无效,我会在 error.log 中收到类似“开始和结束标签不匹配”的消息。可能是其他的。

我该如何控制和避免它?

4

2 回答 2

0

你不能。在一般情况下,XML 解析器无法解析 HTML。只有当您使用格式良好的 XHTML 时,它才会起作用。

于 2012-12-11T14:57:30.040 回答
0

Nginx 的 XSLT 模块的当前实现不支持 HTML,因为它当前使用 XML 解析器。也就是说,可以修补 XSLT 模块以包括对 HTML 转换的支持。在https://github.com/jcu-eresearch/nginx-custom-build/blob/master/nginx-xslt-html-parser可以找到当前稳定版 Nginx(撰写本文时为 1.4.2)的补丁.补丁。您将需要应用此补丁并重新编译 Nginx,确保您为编译配置了--with-http_xslt_module支持。Nginx 早期版本(大约 v1.1)的原始补丁最初来自https://bitbucket.org/lrowe/nginx-xslt-html-parser

配置此 Nginx 修补版本的说明位于 http://docs.diazo.org/en/latest/deployment.html#nginx。因此,在您的情况下,配置 Nginx 将如下所示:

location /news/ {
    proxy_pass         http://news.intranet/$request_uri;
    proxy_set_header   Host news.intranet;
    xslt_stylesheet    /var/www/www/style-news.xsl;
    xslt_html_parser   on;
    xslt_types         text/html;
}

这将启用特殊的 HTML 解析器,并启用 HTML 内容类型的解析器。

于 2013-08-20T00:39:56.973 回答