2016-12-15 117 views
0

这里是我的web.config规则IIS/web.config中的URL重定向规则不触发

<rule name="spiderRedirect" stopProcessing="true"> 
     <match url=".post/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/([0-9a-zA-Z-]+)" /> 
     <action type="Redirect" url="https://example.net/bot/post.php?category={toLower:{R:1}}&amp;id={toLower:{R:2}}&amp;title={toLower:{R:3}}" appendQueryString="false" /> 
    </rule> 

这应该给这样的结果

输入:

https://example.net/post/celebrity/4cHYQ7i/maisie-williams

应导致:

{R1}: celebrity 
{R2}: 4cHYQ7i 
{R3}: maisie-williams 

,它应该重定向到:

https://example.net/bot/post.php?category=celebrity&id=4cHYQ7i&title=maisie-williams

此输入:

https://example.net/post/nerdy/NE5cHQZ/when-i-have-to-do-technical-support

应导致:

{R1}: nerdy 
{R2}: NE5cHQZ 
{R3}: when-i-have-to-do-technical-support 

服务器运行,我敢肯定的正则表达式是正确的,但规则永远不会被触发。即使我使用上述输入,我也不会重定向到Google。

为什么不触发规则?

+0

为什么你的正则表达式有一个前导点? – Dai

+0

你也应该在你的正则表达式中使用'^ $'锚来避免不正确的捕获。 – Dai

回答

0

您将转义“/”来匹配您的不同输入。新的正则表达式是:

([0-9a-zA-Z]+)\/([0-9a-zA-Z]+)\/([0-9a-zA-Z-]+) 

你可以在https://regex101.com上测试它。 它匹配你的两个不同的输入。

+0

谢谢,我将它改为:,但它仍然不会触发匹配。 – ganjan

+0

您的正则表达式与您的两个输入不匹配吗?我认为问题来自'post' – Mattasse

+0

@Mattlasse我在regex101签出。我必须表明我希望'post'后的值 – ganjan

0

我明白了。同时检查用户代理。 我使用它来重定向网络爬虫。

<rule name="spiderRedirect" stopProcessing="true"> 
     <match url=".?post/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/([0-9a-zA-Z-]+)" /> 
     <conditions> 
     <add input="{HTTP_USER_AGENT}" pattern="(Google|MSNBot|Twitterbot|Pinterest|Facebot|facebookexternalhit|MJ12bot|bingbot|SimplePie|SiteLockSpider|okhttp|curl|YandexBot|ScoutJet|Slurp|DuckDuckBot|Baiduspider|Sogou|Konqueror|Exabot|ia_archiver|Screaming)"/> 
     <add input="{HTTPS}" pattern="on"/> 
     </conditions> 
     <action type="Redirect" url="https://example.net/bot/post.php?category={toLower:{R:1}}&amp;id={toLower:{R:2}}&amp;title={toLower:{R:3}}" appendQueryString="false" /> 
    </rule>