共用方式為


Return 404.4 Not Found when URL Rewrite

URL Rewrite module can redirect a URL to any internal (on the same site) or external URLs (on a separate site).

https://www.iis.net/download/urlrewrite

However, URLRewrite rewrite rule to external site doesn’t work. You can only rewrite the URL in the same site and same application pool.

For example, let’s set following rule to rewrite original Requested URL: https://localhost/81 to https://localhost:81

<rewrite>

            <globalRules>

                <rule name="URLTest">

                    <match url="([0-9]+)" />

                    <action type="Rewrite" url="https://localhost:{R:1}" appendQueryString="true" />

                </rule>

            </globalRules>

 </rewrite>

Test https://localhost/81 and return HTTP Error 404.4- Not Found

The resource you are looking for does not have a handler associated with it.

Check FREB Log, it shows RewriteModule execute successfully

14.

PRE_BEGIN_REQUEST_START

ModuleName="RewriteModule"

15.

i

URL_REWRITE_START

RequestURL="/81", Scope="Global", Type="Inbound"

16.

RULE_EVALUATION_START

RuleName="URLTest", RequestURL="81", QueryString="", PatternSyntax="Regex", StopProcessing="false", RelativePath="/"

17.

PATTERN_MATCH

Pattern="([0-9]+)", Input="81", Negate="false", Matched="true"

18.

REWRITE_ACTION

Substitution="https://localhost:{R:1}", RewriteURL="https://localhost:81", AppendQueryString="true", LogRewrittenURL="false"

19.

RULE_EVALUATION_END

RuleName="URLTest", RequestURL="https://localhost:81", QueryString="", StopProcessing="false", Succeeded="true"

20.

GENERAL_SET_REQUEST_HEADER

HeaderName="X-Original-URL", HeaderValue="/81", Replace="true"

21.

i

URL_CHANGED

OldUrl="/81", NewUrl="https://localhost:81"

22.

i

URL_REWRITE_END

RequestURL=https://localhost:81

 

But it fails with 404.4 in IIS Web Core.

156.

r

MODULE_SET_RESPONSE_ERROR_STATUSWarning

ModuleName="IIS Web Core", Notification="MAP_REQUEST_HANDLER", HttpStatus="404", HttpReason="Not Found", HttpSubStatus="4", ErrorCode="The filename, directory name, or volume label syntax is incorrect.

 (0x8007007b)", ConfigExceptionInfo=""

 

Solution

======

You need to install Application Request Routing and enable Proxy, then it will work with URL rewriting to remote servers (regardless where or what they are) since the Routing will take care of that.

https://www.iis.net/download/ApplicationRequestRouting

Enjoy!

Anik

Comments

  • Anonymous
    December 19, 2012
    That did the trick. Thanks! I was trying to redirect to *.do page.

  • Anonymous
    September 24, 2013
    Thanks!

  • Anonymous
    July 02, 2014
    This resolved my problem.Thank you very much!

  • Anonymous
    October 14, 2014
    Thanks a lot, Anik! ARR install & proxy enable works :)

  • Anonymous
    February 15, 2015
    The comment has been removed

  • Anonymous
    October 24, 2015
    This was very helpful. Thank you very much!

  • Anonymous
    November 19, 2015
    Thanks a lot! Very very helpful :-)

  • Anonymous
    November 19, 2015
    Very very helpful. Thank you!

  • Anonymous
    October 18, 2016
    Thanks!!