[SOLVED]iis rewrite rule fails when www is omitted - iis

I have searched Stackoverflow extensively. None of them are working for my problem.
Problem:
I have a dummy website hosted on local machine with hostname: gateway.com on port 443 (self signed cert) and also i have hosted a private website on localhost:9443 with same signed cert.
Below is the webconfig rewrite rule i have added for gateway.com.
<rewrite>
<rules>
<rule name="Reverse proxy to SAP" stopProcessing="true">
<match url="^sap/(.*)"/>
<action type="Rewrite" url="https://localhost:9443/sap/{R:1}" appendQueryString="true" logRewrittenUrl="true"/>
</rule>
</rules>
</rewrite>
The idea here is that; whenever i hit https://gateway.com/sap/getsomething; it should rewrite to https://localhost:9443/sap/getsomething
The above rule is working perfectly fine when i use https://www.gateway.com/sap/getsomething
but it fails if i omit www.
Kindly please help.
Thanks
Note: Solved it. It was a DNS correction required in hosts file as well as hostname in website config in IIS. My VM where i was testing was having issue.

Related

How to rewrite a domain to another one in IIS 10?

I have the following website configuration on IIS 10.
<rewrite>
<rules>
<rule name="Rule1">
<match url=".*" />
<action type="Rewrite" url="https://www.google.com/{R:0}" />
</rule>
</rules>
</rewrite>
I'm trying to rewrite all the requests sent to mydomain.com to google.com (taken as an example)
When running the website, I'm getting the following google error page in the screenshot. Means the rewrite is not behaving properly and doesn't send requests to the domain www.google.com
Can anyone help please ?
Thanks. Regards,

IIS Reverse proxy/Global URL Rewrite for "/api/" folder for all sites

I would like to reverse proxy any requests to an IIS instance for any sites where the request is in the '/api/' folder. I set up a server farm and have the reverse proxy working for everything using the '*' wildcard, but when I want to limit the scope to a RegEx it will not rewrite/proxy to the backend server. The steps I took at the IIS INSTANCE level:
Set up a web farm - only one server in it, machine2
Set up a rewrite for '*'
Tested against 'http://machine1/site1/api/api1' - it was successfully routed to machine2/site1/api/api1
Changed inbound rule from Wildcard to Regular Expressions
Changed Pattern to '.(/./api/.*)' (without the single quotes)
Tested against 'http://sarjhennew10vm/site1/api/api1'
Request was not routed to machine 2.
Below is a snippet from my applicationHost.config [the root of IIS].
<rewrite>
<globalRules>
<rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*(\/.*\/api\/.*)" />
<action type="Rewrite" url="http://Farm1/{R:1}" />
</rule>
</globalRules>
</rewrite>
<proxy enabled="true" />
Is it possible to to a global URL re-write to the server farm for any site on the instance for specific folders?
Edit: It was answered below - I am including a picture in case others run into this. The test pattern isn't clear to me - and counters documentation found here.
Your pattern is incorrect, you can try below code, and change the rewrite url to https://Farm1/{R: 0}
<rule name="ARR_Farm1_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*(\/api\/.*)" />
<action type="Rewrite" url="https://Farm1/{R:0}" />
</rule>

Issue with redirection in IIS?

I have the following rule in IIS
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" patternSyntax="ExactMatch" stopProcessing="true">
<match url="apex" />
<action type="Redirect" url="http://{HTTP_HOST}:8080/ords/f?p=1" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
This rule works fine and redirects URL's from
www.example.com/apex
to
www.example.com:8080/ords/f?p=1
I would like to get an URL without the port 8080 in it. So, when I change the rule type to Rewrite. It doesn't work any more. It ommits the port and I'm getting the error : 404 - File or directory not found
Does anyone know how to solve that please ?
Thanks.
Regards,
I guess you are getting 404.4. If you didn't enabled detailed error message for your website. Then you will get 404 File or directory not found.
Please install failed request tracing
https://www.microsoft.com/en-us/download/details.aspx?id=47333.
Then go to IIS manager->server node->application request routing cache->server proxy setting->enable proxy.

Rewrite subdomain as subfolder on IIS

I'm trying to use content hosted on a subdomain site as a sobfolder on same domain. (On different servers)
mydomain.com -> is main domain.
sub.mydomain.com -> is sub domain.
mydomain.com/sub -> is what I want to show my sub domain content on.
on my main domain, I changed Application Request Routing as "enable proxy" and used code below, on the web.config
<rewrite>
<rules>
<rule name="Reverse Proxy to fuarlar" stopProcessing="true">
<match url="^sub/(.*)" />
<action type="Rewrite" url="http://sub.mydomain.com/{R:1}" />
</rule>
</rules>
</rewrite>
But It didn't work. (on www.mydomain.com/sub gives me an error that '404 not found')
What should I make for that?
Whats wrong with my configuration?
What should my steps be?
www.mydomain.com/sub does not match ^sub/(.*). You are missing a slash at the end of your URL.

HTTP to HTTPS on domain hosted in VPS using IIS

I have a domain which has the DNS setting pointing to a VPS.
The VPS has an IIS 10 instance which hosts the simple website using html using bootstrap.
I installed an SSL certificate and added bindings for the https part.
I am able to browse the domain on http and https.
I added the following rule to the web.config:
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
However this does not seem to help. I am still able to browse on http.
I tried the following:
Tried installing URL Rewrite but it looks like Windows Server 2016 and IIS 10 does not allow the installation
Tried enabling Requires SSL option.
This shows the website in http without images but with text
The website is properly displayed in https
What am I missing here?
I was installing the wrong URL rewrite.
This article helped me fix the problem with the right links.
Automatic IIS redirect http to https on Windows Server 2016: https://gridscale.io/en/community/tutorials/iis-redirect-http-to-https-windows/

Resources