2017-10-21 249 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>