2
votes

We've rebuilt our Website and our extensions will be .html. Currently, they are .htm. When a user visits our site from a bookmarked page for example that's .htm, I want it to redirect to the .html version.

I have looked through stackoverflow to see if there is already a Q&A on this. Most are Apache - .htaccess related. I'm using IIS. The closest answer I could find on stackoverflow is this one: IIS url rewrite rewriting all .asp to .html

I tried following the advice in that post, but it's not working. The webpage tells me This webpage has a redirect loop. and Error code: ERR_TOO_MANY_REDIRECTS

I'm in the URL Rewrite module in IIS. I create a new "blank rule" for inbound rules. Here are the settings I'm using as advised by that stackoverflow post: (BTW, I would have posted this in that thread, but it's over 3 years old, so I wasn't sure if that was advised)

Requested URL: Matches the Pattern

Using: Regular Expressions

Pattern: (.*).htm(.*)

Ignore Case is checked.

Conditions: Local Grouping: Match All

I Added a condition...

Condition Method: {REQUEST_METHOD}

Check if input string: Matches the Pattern

Pattern: ^GET$

Ignore Case is checked

Action type: Redirect

Redirect URL: {R:1}.html{R:2}

Append Query String is checked

Redirect type: Permanent (301)

I'm doing a 301 because I want the search engines to know our URL extensions have changed. Our URLs are exactly the same. The only difference is they're going to be .html instead of .htm. So... something/something.htm is something/something.html.

1

1 Answers

2
votes

The rule should be as simple as:

<rule name="htm to html" stopProcessing="true">
    <match url="(.+).htm$" />
    <action type="Redirect" url="{R:1}.html" />
</rule>

Or in the configuration screen:

rule

This rule will redirect any url ending with .htm and containing at least one more character than .htm to the same url but replacing .htm with .html