1

I am trying to add a iis url rewrite rule that differs in the development environment (on my local machine) and once uploaded to the server and published (deployed).

My IIS Rewrite Rule works, but I don't want to have to remember to change localhost to my server hosting address once I deploy the website. Any suggestions?

Below are my IIS URL Rewrite rules in <system.webServer>

<!-- IIS Rules Rewrite -->
<rewrite>
  <rules>  
<!-- Serve site map with proper XML content type response header. -->
    <rule name="Sitemap XML" enabled="true" stopProcessing="true">
      <match url="sitemap.xml" />
      <action type="Rewrite" url="sitemap.aspx" appendQueryString="false"/>
    </rule>
    <!-- Access block rule - is used to block all requests made to a Web site if those requests do not have the host header set. This type of rule is useful when you want to prevent hacking attempts that are made by issuing HTTP requests against the IP address of the server instead of using the host name -->
    <rule name="Fail bad requests">
      <match url=".*"/>
      <conditions>
        <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
    <!-- HTTP to HTTPS Rule 
    <rule name="Redirect to https" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" negate="false" />
      <conditions logicalGrouping="MatchAny">
        <add input="{HTTPS}" pattern="off" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Found" />
    </rule>-->
3
  • I think you can use configuration file transformation (msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx) Commented Mar 30, 2017 at 4:49
  • Thanks @kienct89, that seems right. How would I do it specifically for the second rule - changing localhost to the hosting address? Commented Mar 30, 2017 at 5:10
  • I added my answer Commented Mar 30, 2017 at 5:20

1 Answer 1

6

I think you can use configuration file transformation (msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx)

NOTE: The whole system.webServer section will be replaced with whatever put inside the web.release.config

web.config

<?xml version="1.0"?>
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
            <rule name="Sitemap XML" enabled="true" stopProcessing="true">
              <match url="sitemap.xml" />
              <action type="Rewrite" url="sitemap.aspx" appendQueryString="false"/>
            </rule>
            <rule name="Fail bad requests">
              <match url=".*"/>
              <conditions>
                <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
              </conditions>
              <action type="AbortRequest" />
            </rule>
          </rules>
        </rewrite>
    </system.webServer>
</configuration>

web.release.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.webServer xdt:Transform="Replace">
        <rewrite>
          <rules>
            <rule name="Sitemap XML" enabled="true" stopProcessing="true">
              <match url="sitemap.xml" />
              <action type="Rewrite" url="sitemap.aspx" appendQueryString="false"/>
            </rule>
            <rule name="Fail bad requests">
              <match url=".*"/>
              <conditions>
                <add input="{HTTP_HOST}" pattern="YOUR_NEW_SERVER_URL_HERE" negate="true" />
              </conditions>
              <action type="AbortRequest" />
            </rule>
          </rules>
        </rewrite>
    </system.webServer>
</configuration>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.