Solved

Search Engine Friendly Pages Sub '?' for '/'

Posted on 2003-11-08
8
228 Views
Last Modified: 2013-12-24
Lets say we have a profile page with the following URL

http://www.mypage.net/profiles/test.cfm?contact_ID=71

How would we make the URL without the '.cfm' ... into something like this

http://www.mypage.net/profiles/test/contactID/71

All the sample code I have seen still had the '.cfm' still in the URL. I would like to be able to hide the fact that the page is being generated with cold fusion.
0
Comment
Question by:TallGuyMD
8 Comments
 
LVL 5

Expert Comment

by:dc197
ID: 9708502
You would rename the file from "test.cfm" to "index.cfm".

Make sure that your webserver is set up to treat files called "index.cfm" as the default file.

If you make a directory called "test" and put your original file in there but renamed index.cfm,
http://www.mypage.net/profiles/test.cfm
then becomes
http://www.mypage.net/profiles/test/



You cannot swap the ? and the = for / because CFM will not know that they are form/url variables and will treat them as part of the path.
0
 

Author Comment

by:TallGuyMD
ID: 9709043
Actually, you should be able to rename the page as an index page, then follow the directions below...


Having search engine friendly sites these days is no longer a good idea...it's a MUST!

More and more SE's are ignoring the META tags we have all come to know and love and are concentrating more and more on the actual content of your page. But what happens if the page is called dynamically? Answer - The bot falls on its bot! Most SE bots will not follow a URL once it hits the ? or & which indicates the dynamic content and will grind to a halt. This tutorial will show you a method to make sure the SE bots really dig into your site and index every possible page!

The bones of the script below are very simple and lightning fast. In a nutshell the script interrogates the URL you pass it to determine where the URL ends and the dynamic content begins. Take this example:

http://www.yourdomain.com/page.cfm?Var1=2&Var2=2&Var3=3 

If you rewrote the above to get rid of the ? and & and replace them all with / to make it look like folders you would get:

http://www.yourdomain.com/page.cfm/Var1/1/Var2/2/Var3/3 

Marvellous!! We now have a URL that the SE bot will follow as it looks like a bunch of folders!

But how do we use this in our query? That’s where the script comes in. On the page where you are passing this new URL to i.e. page.cfm simply add the script BEFORE the queries and write your query as normal.

The script will basically scan through the URL looking for the extension, the .cfm in this case. Once it finds it, it then starts looking for another /. Now it knows that if it finds another one it’s a dynamic URL and it needs to start collecting the variables.

Obviously each variable name will have a value so it knows that after the very next / will be the value for the variable. It will then continue to decipher the rest of the URL until it runs out of /’s.

Your query will then accept those variables in the normal way and process.

Here’s the script:

<cfscript>
   debug = 0;
   valid_extensions = "html,htm,cfm,asp,jsp";
   url_suffix = ".html";
   path_to_parse = replacenocase(cgi.path_info, cgi.script_name, "");
   if (listlen(path_to_parse, "/") gte 2) {
      var_name = "";
      for (x = 1; x lte listlen(path_to_parse, "/"); x = x + 1) {
      if (var_name eq "") {
         var_name = trim(listgetat(path_to_parse, x, "/"));
         if (not refind("^[A-Za-z][A-Za-z0-9_]*$", var_name)) {
            var_name = "";
            x = x + 1;
         }
      }
      else {
           value_to_set = listgetat(path_to_parse, x, "/");
           if (trim(valid_extensions) neq "" and x eq listlen(path_to_parse, "/")) {
               for (ext = 1; ext lte listlen(valid_extensions); ext = ext + 1) {
                     extension = "." & listgetat(valid_extensions, ext);
                     if (right(value_to_set, len(extension)) eq extension) {
                          value_to_set = left(value_to_set, len(value_to_set) - len(extension));
                          url_suffix = extension;
                          break;
                     }
            }
      }
  setvariable(var_name, value_to_set);
  if (isdefined("debug") and debug) {
     writeoutput("<!-- " & var_name & " = " & value_to_set & " -->" & chr(10));
  }
  var_name = "";
  }
 }
}
</cfscript>

So where to use it? Well the easiest method is to use it as an include in each page that has your SE friendly URL passed to it. You could just add it to the Application.cfm file as well.

Amendment: Some users have reported a bug with the above tutorial. If you copy and paste the script direct into your page you may find that the script will not work correctly and comes up with a compilation error.
If this happens, simply strip out the whitespace before each line of code in the script and this should fix it.
0
 

Author Comment

by:TallGuyMD
ID: 9709048
I guess you could define a variable to tell the script when to start collecting the variables

Example))) <cfscript>
   debug = 0;
   valid_extensions = "html,htm,cfm,asp,jsp";

But how would you remove remove the '.'
0
The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

 
LVL 1

Expert Comment

by:kjuliff
ID: 9709799
I just tested the script and it is really good. But I'd like to hide the parameters all together. eg
http://www.mypage.com/mb3/viewmessages.cfm/Forum/1/Topic/5224/sortby/d
works BUT it the sE indexes this then there'd be so many pages (combinations of parameters) indexed...

I'd like to have
http://www.mypage.com/mb3/viewmessages.cfm only displayed as the URL. Or am I missing something?



0
 

Accepted Solution

by:
modulo earned 0 total points
ID: 11052445
PAQed, with points refunded (20)

modulo
Community Support Moderator
0
 

Expert Comment

by:finnstone
ID: 11193988
tallguy, your code does not do anything.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Mapping Custom Error Page in IIS 7.0 / Windows 2008 3 53
Web Site Hosting 10 86
performance tune IIS 10 on win 2016 that only runs one website 4 58
Soundcloud.com 4 22
Article by: kevp75
Hey folks, 'bout time for me to come around with a little tip. Thanks to IIS 7.5 Extensions and Microsoft (well... really Windows 8, and IIS 8 I guess...), we can now prime our Application Pools, when IIS starts. Now, though it would be nice t…
When it comes to showing a 404 error page to your visitors, you do not want that generic page to show, and you especially do not want your hosting provider’s ad error page to show either. In this article, I will show you how to enable the custom 40…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

785 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question