Facebook共享对话框的IIS重写规则不起作用

时间:2017-10-21 12:24:45

标签: angularjs facebook iis phantomjs

我有以下规则

<rule name="SEO" enabled="true" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAny">
          <add input="{HTTP_USER_AGENT}" pattern="(facebookexternalhit)|(facebook)|(Twitterbot)|(Pinterest)" />
          <add input="{QUERY_STRING}" pattern=".*escaped_fragment_=(.*)" />
      </conditions>
      <action type="Rewrite" url="http://localhost:8004/{URL}" />
</rule>
我在IIS(Windows Server 2012)上托管的angularJS应用程序的

我的应用使用html5Mode

$locationProvider.html5Mode().enabled = true;

并打开端口8004(我关闭Windows防火墙一段时间以检查我的方案是否有效)

景观很容易。当有人想通过AngularJS分享我的facebook页面时,请求将被重定向到PhantomJS正在侦听的端口(以呈现页面)

但问题是我只能在共享框中看到404错误,并且phantomJS脚本没有提取任何请求(我在控制台窗口中看不到任何内容)

var system = require('system');
var server = require('webserver').create();

server.listen(port, function (request, response) {
    console.log(JSON.stringify(request, null, 4));
});

所以看起来重写规则不起作用(这是我的猜测)。如果我只是转到http://localhost:8004/,我可以在控制台窗口中看到呈现的页面和phantomJS日志(这样就可以了)

1 个答案:

答案 0 :(得分:1)

如果您尝试将请求重写到不同的IIS网站(或不同的应用程序),那么在此之前您需要安装ARR:

1)您需要安装ARR模块https://www.iis.net/downloads/microsoft/application-request-routing

2)在IIS管理器中,您应启用反向代理

2.1)在服务器节点上单击&#34;应用程序请求路由缓存&#34;

2.2)点击&#34;服务器代理设置&#34;然后单击&#34;启用代理&#34;,然后&#34;应用&#34;

您还需要在规则中应用小修补程序:

<rule name="SEO" enabled="true" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAny">
          <add input="{HTTP_USER_AGENT}" pattern="(facebookexternalhit)|(facebook)|(Twitterbot)|(Pinterest)" />
          <add input="{QUERY_STRING}" pattern=".*escaped_fragment_=(.*)" />
      </conditions>
      <action type="Rewrite" url="http://localhost:8004{URL}" />
</rule>