URL rewriting is usually needed to make a URL for a dynamic web page more presentable for the reader or for search engines optimization.
For example, a regular ASP URL might look like this:
http://www.site.com/Articles/Article.asp?id=20
A more presentable way of rewriting the URL might be:
http://www.site.com/Articles/20.htm
of course, you can write HTML/ASP file for each article, but that would be much of I/O overhead on adding/updating articles and for reading too..
one solution is to use an ISAPI filter but many people want to avoid this for due to either the limitation on the skills, a limitation of the hosting service they use, or just to avoid complexity and potential risk. It also makes the solution less portable.
A much simple solution, is to use 404 custom error page in IIS, here are steps and code:
1- Create "URL-Rewrite.asp", under Articles folder.
2- in IIS , right-click on "Articles" folder > properties > Custom errors > Select 404 and click "Edit Properties" ..
set Message Type : "URL", and set URL : "/Articles/URL-Rewrite.asp"
3- Place this code in "URL-Rewrite.asp" <% option Explicit
Dim Er,ID
Set Er = Server.GetLastError()
If Not Er Is Nothing Then
'' For 404: URL will be passed as query string
ID = GetURLID(Request.QueryString )
'Http error 400 won't raise a code error
If ID>0 And Er.Number=0 Then
Response.Status = 200
Call DisplayArticle(ID)
' error 500 or similar
ElseIf Er.Number<>0 Then
Response.Write "Unexpected error was occured"
' undesired URL
Else
Response.Status = 404
Response.Write "Page cannot be found"
End if
End If
Set Er = Nothing
Function GetURLID(URL)
' Extract ID using regular expressions
Dim ID : ID = 0
Dim reg : Set reg = New RegExp
reg.Global = False
reg.IgnoreCase = True
reg.Pattern = "^404;http://www.site.com/Articles/(\d+).htm$"
if reg.Test(URL) Then
ID= reg.Replace(URL ,"$1")
End If
Set reg = Nothing
GetURLID = ID
End Function
Sub DisplayArticle(ID)
'''' here you will place the real code that read article form database and write it
Response.Write "<html>" &_
"<head>" &_
"<title>Article "& ID &"</title>" &_
"</head>" &_
"<body>" &_
"Content " & ID &_
"</body>" &_
"</html>"
End Sub
%>
now,when requesting the url "http://www.site.com/Articles/20.htm", the IIS doesn't find the file so it transfer execution to the custom error page "http://www.site.com/Articles/URL-Rewrite.asp" and sending "404;http://www.site.com/Articles/20.htm" as query string.
The Transfer happens by calling "server.Transfer" which keeps the existing query string and any form variables available to the page it is transferring to, in our case "URL-Rewrite.asp".
Hi,
Now I am trying to make a url rewrite, I think your code is perfect but i still have problem with this session, could you help me please?
Sub DisplayArticle(ID)
'''' here you will place the real code that read article form database and write it
what do you mean to place the real code from database?
could you place it with your code please?
I am waiting for your answer.
Thanks, Wesley