2017-10-21 161 views
0

我有以下规则IIS重写规则不起作用

<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> 
我angularJS主办的IIS(Windows Server 2012中)上应用的

我的应用程序使用html5Mode

$locationProvider.html5Mode().enabled = true; 

8004被打开的端口(I关闭Windows防火墙一会儿,以检查是否我的方案作品)

的scenrio容易。当有人想通过facebook分享我AngularJS页面,请求将被重定向到的端口,whene的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/,我可以在控制台窗口中看到渲染的页面和幻影日志(所以它的工作原理)

+0

你使用FB调试工具清除缓存? – CBroe

回答

1

如果您尝试将请求重写到不同的IIS网站(或不同的应用程序)你需要安装ARR:

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

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

2.1)在服务器节点上点击“应用程序请求路由缓存”

2.2)单击“服务器代理设置”,然后单击“启用代理”,再点击“应用”

而且你需要在应用规则的小修正:

<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>