Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IIS Rewrite not working (but redirection does)

I was trying to play with URL re-writing using the Rewrite Module 2.0 but I had no luck getting it to work. What I'm trying to do is re-write all calls to web app at port 80 to other applications hosted in IIS (or maybe on different servers on the network). Using the GUI provided by IIS I created the following rule:

<rewrite>     <rules>         <rule name="ReverseProxyInboundRule1" stopProcessing="true">             <match url="site1/(.*)" />             <action type="Rewrite" url="http://localhost:7001/{R:1}" />         </rule>     </rules> </rewrite> 

Quiet simple, but unfortunately it does not work. On the other hand, when I change the action type to Redirect, it works fine.

What could be the problem?

like image 855
Kassem Avatar asked Mar 12 '13 09:03

Kassem


People also ask

What is the difference between redirect and rewrite?

Simply put, a redirect is a client-side request to have the web browser go to another URL. This means that the URL that you see in the browser will update to the new URL. A rewrite is a server-side rewrite of the URL before it's fully processed by IIS.

How do you check if URL Rewrite is enabled IIS?

Checking if the URL Rewrite module is installed To see if the URL Rewrite module is installed, open IIS Manager and look in the IIS group - if the module is installed, an icon named URL Rewrite will be present.

Does URL Rewrite require reboot?

Once installed you may need to reboot.


1 Answers

I ran into this same issue yesterday, and it took me a long time to figure out.

The key here is that you've got an http:// prefix in your rewrite action; that makes this a special case that needs to be handled by Application Request Routing. The first step is to make sure that the Application Request Routing module is installed. You can find the module at https://www.iis.net/downloads/microsoft/application-request-routing. Once that is installed, go to your IIS web server (a level up from your web site), and open the Application Request Routing Cache feature. From the actions on the right, choose Server.Proxy.Settings, and make sure that the "Enable Proxy" checkbox is checked. This allows the URL rewrite task to be re-routed to Application Request Routing, and your reverse proxy should work for external requests.

The idea came from this excellent blog post from 2009: http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

like image 115
Rob Lyndon Avatar answered Sep 24 '22 13:09

Rob Lyndon