我有以下规则
<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日志(这样就可以了)
答案 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>