How do I properly use Mod-Rewrite to change URL?

I am on a windows server with IIS.  Currently it is windows 2003 with IIS 6, but I will soon upgrade to 2007 and IIS 7.  However, I am using the third party IIS Mod-Rewrite from Micronovae, so I think the code should apply the same as running Apache.

I am currently testing code, and have found that I am getting the desired effect, however, I get the feeling I may be grossly misusing the rewrite rules, as I have not seen it done like this in the forum.  The goal is to have a URL like: http://www.something.com/subTopic/116/HeartHealth replace a URL like:  http://www.something.com/index.cfm/fuseaction/center.subTopicID/116/HeartHealth while displaying the first URL in the browser.  Also, I need to make sure that all the old URLs still work, but redirect to the new, cleaner URL.  

The code below redirects the URL to the new convention with a redirect, and then points back to the original without a redirect, so that the new URL is displayed in the browser.  It works to type in either convention. I will point all internal links  to the new URLs, but my concerns are:

1.  Will search engines penalize me for having duplicate content.  I.e. you can get the same content via two URLs OR will they not follow the old links anymore, because of the redirect(do I need to add a 301 somehow?)

2. The regex rule seems to be working, but I'm not sure if my wildcards and end of expression syntax may produce unexpected results.

3. Is there a better way to do this?

I would appreciate any help you can give me.  Thanks.

RewriteEngine On
 
RewriteRule ^/index.cfm/fuseaction/center.subTopic/subTopicID/(.*)$ /subtopic/$1 [R]
RewriteRule ^/subtopic/(.*)$ /index.cfm/fuseaction/center.subTopic/subTopicID/$1

Open in new window

dojoHoboAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

dojoHoboAuthor Commented:
Increasing the point value; I know the information in the answer will be helpful to a lot of people.
0
Hube02Commented:
>>>> 1.  Will search engines penalize me for having duplicate content.  I.e. you can get the same content via two URLs OR will they not follow the old links anymore, because of the redirect(do I need to add a 301 somehow?) <<<<

I do not believe you have an issue with duplicate content here.
If the user requests: http://www.something.com/index.cfm/fuseaction/center.subTopicID/116/HeartHealth
they are redirected to: http://www.something.com/subTopic/116/HeartHealth

I would add a 301 to this if the rewrite engine you are using allows it, I would also add the "last rule" flag. On Apache this would be:

[R=301,L]

You may also need to provide the full url in the rewrite, so the whole thing would be:

 RewriteRule ^/index.cfm/fuseaction/center.subTopic/subTopicID/(.*)$ http://www.something.com/subTopic/$1 [R]


Then when the browser gets redirected to http://www.something.com/subTopic/116/HeartHealth
the page at: If the user requests: http://www.something.com/index.cfm/fuseaction/center.subTopicID/116/HeartHealth is loaded. But since this is a normal rewrite so the URL does not actually change. For search engine purposes this is the only URL

2. The regex rule seems to be working, but I'm not sure if my wildcards and end of expression syntax may produce unexpected results.

Your syntax looks perfectly valid. However, I notice the you start with a beginning / and this is different than on Apache, so there may be other differences in the engine as well

3. Is there a better way to do this?

To be honest, this looks perfectly valid and I can't think of a better way to do it, as long as you make sure you change all the current links in all the pages to the new, shorter URL. Then the only thing that will be redirected is when a link comes from an outside source. Once the search engines re-index your site it will have the new URLS due to the 301's
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
dojoHoboAuthor Commented:
This is awesome information.  I think the redirect and last rule syntax is the same in this engine, so I will definitely add that.  

One last little bit, when I add the full (new) URL, as you showed, it doesn't replace just the ^index.cfm... part; it replaces the full old URL with the full new URL?  Is this the more standard way to do it?
0
Hube02Commented:
The reason I said to add the full new url is that on Apache and Mod_Rewrite, if you use a 301 and do not include the full url, including the http://www.someserver.com/ Apache generates a system error, or at least that has been my experience so I always include it. This could be different on the rewrite module you are using. I have never actually used that one. The one we generally go with is ISAPPI. However, I had never heard of it before and plan to test it out. ISAPI has some significant differences from MOD_REWRITE and if this one is closer to the Apache standard then it may be a better choice. Less need to make changes when porting from Apache to IIS.

And you only need the full url in the second par, as the below that sends all requests to a new server

RewriteRule ^(.*)$ http://new.server.com/$1 [R=301,L]
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Development

From novice to tech pro — start learning today.