Makale Özeti

Son zamanların modası adres gizleme... www.siteadi.com/Bolumadi/id şeklindeki adresler... Bu makalede REwritepath ile ansıl yapıldığını göreceğiz

Makale

Merhaba .net severleri bu yazımda size global.asax da kullanabileceğimiz Rewritepath fonksiyonunu anlatacağım..
 Peki ne işe yarar bu rewrite path:Aspindirde gördüğümüz Kategori/ID tarzında yapılar bu gruba girer. Ortada gerçek bir klasor yoktur ama bize varmış gibi görünür... Kısaca anlatmak gerekirse adres satırını değiştirmeden redirect etmek denebilir... Ama yönlendireceğimiz sayfa bir dış adres olamaz. Zaten buraya fiziksel adres yazamazsınız da... Yazabileceğiniz tek şey virtual path dediğimiz sanal yol oalcaktır...
 
 Burada örnek olarark kullanacağım yöntem şu olacak. Bolum/ID
 
 Şimdi global.asax ile başlayalım kodlamamıza...(Başka yöntemler de mevcut ama bu makalenin konusu bu :))

<%@ Application Language="VB" %>

<script RunAt="server">

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

' Code that runs on application startup

End Sub

 

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)

' Code that uns on application shutdown

End Sub

 

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

' Code that runs when an unhandled error occurs

End Sub

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)

' Code that runs when a new session is started

End Sub

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)

' Code that runs when a session ends.

' Note: The Session_End event is raised only when the sessionstate mode

' is set to InProc in the Web.config file. If session mode is set to StateServer

' or SQLServer, the event is not raised.

End Sub

 

Sub application_beginrequest(ByVal sender As Object, ByVal e As EventArgs)

Dim path As String = Context.Request.Path 'çağırılan path i alıyoruz.Ben test ederken /2/default.aspx di

path = path.Replace("\", "/")

Dim arrpath As Array = path.Split("/")

Dim yenipath As String

Select Case arrpath(2).ToString.ToLower 'neden 0 değil çünkü localde test ederken pathimiz /2/default.aspx şeklinde dönüyor

Case "makale"

yenipath = arrpath(0) & "/" & arrpath(1) & "/" & "makale.aspx?makaleid=" & arrpath(3) 'burada arrpath(0) ve arrpath(1) i kullanmamızın nedeni sayfamızın rootta değil de /2/ de yer alması ayrıca rewritepathin çağrıılan adresin üstüne yapamsı yani dönen pathimiz /2/Makale/15 olacaktı ve pathi /2/makale.aspx değil de makale.aspx oalrak kullansaydık gideceğimiz adres /makale.aspx oalcaktı ve hata alacaktık

Case "resim"

yenipath = arrpath(0) & "/" & arrpath(1) & "/" & "/resim.aspx?resimid=" & arrpath(3)

Case Else

yenipath = arrpath(0) & "/" & arrpath(1) & "/" & "/default.aspx"

End Select

Context.RewritePath(yenipath) 'makalemizin can alıcı kodu burası... Adres çubuğundaki adresi değiştirmeden bir nevi redirect görevi görüyor... Yani adres çubuğunu değiştirmeden istediğimiz sayfayı çağırabiliyoruz

End Sub

 

</script>

 

Şimdi makale ve resimlere link verecek default.aspx imizi yazalım… Ben linkleri manual olarak ekledim fazla uzatmamak için.

 

Default.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:HyperLink ID="hypMakalewID" runat="server" NavigateUrl="makale/15">Makale 15</asp:HyperLink>

<asp:HyperLink ID="hypResimwID" runat="server" NavigateUrl="resim/25">Resim 25</asp:HyperLink>

</div>

</form>

</body>

</html>

 

Makalelerin okunmasını sağlayacak olan sayfamız makale.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="makale.aspx.vb" Inherits="makale" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblMakale" runat="server" Text="Label"></asp:Label>

</div>

</form>

</body>

</html>

 

Ve makale.aspx in codebehind ı makale.aspx.vb

Partial Class makale

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

lblMakale.Text = Request.QueryString("makaleid") 'Gelen query yi alalım gerisini yazmıyorum amacımız bunu anlatmak değil çünkü

End Sub

End Class

 

Resimler için resim.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="resim.aspx.vb" Inherits="resim" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblResim" runat="server" Text=""></asp:Label>

</div>

</form>

</body>

</html>

 

Ve resim.aspx in codebehindı resim.aspx.vb:

Partial Class resim

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

lblResim.Text = Request.QueryString("resimid") 'Gelen query yi alalım gerisini yazmıyorum amacımız bunu anlatmak değil çünkü

End Sub

End Class

 

Umarım makalem işinize yaramıştırJ

Tuna Toksöz

 

 

 

 

 

 

 

Makalenin demosu