Harmankaya Logo

Permalink Yapımı Php Mod_Rewrite Kullanımı

EKI 14

Saat: 23:50:47 Gösterim: 2239

php ile permalink yapımıMerhaba gönül dostları (iykkkTongue out) . Ne zamandır forumlarda bakıyorum bakıyorum bakıyorum ve sürekli sorulan soruyu güroyurm Permalink nasıl yapılır?  Permalink yani Türkçe değişiyle Kalıcı Bağlantı... Öncelikle anlatımı geçmeden önce ne işe yarar ondan biraz bahsedelim. Permalink sayesinde biliyorsunuz ki Ulu Üstad Google :D sitemize bir kıyak geçerek( bilinenlere göre ) arama motorunda üst sırada çıkmamızı sağlıyor. Biliyorsunuzdur aynı içerikli www.siteadi.com/film-indir.html , www.siteadi.com/hedele.html gibi iki sayfada film indir kelimesinde ilk sayfa daha önce çıkar.

Şimdi gelelim ne şekilde bir yöntem izleyeceğiniz. Makaleye başlamadan önce şunu garanti ediyorum ki birazcık küçücük bir php bilgisiyle sizde herhangi bir scripte ait sitenizdeki linkleri permalayabileceksinizLaughing

Kullancağımız modül Bkz. Mod_Rewrite. Öncelikle  www.harmankaya.org/goster.php?id=5 gibi bir linki www.harmankaya.org/goster-3-yazi-basligi.html gibi kafamdan bir örnek buluyorum ve başlıyorum. İlk işimiz .Htaccess dosyası kullanarak .php dosyayı html olarak yorumlamayı göreceğiz Bunun için /root altındaki .htacces dosyasına ekleyeceğimiz kod

Öncelikle en üste Mod_Rewrite modülüne göre link verceğimizi sunucumuza anlatıyoruz

Options +FollowSymLinks
RewriteEngine on 

RewriteRule ^goster-(.*)-(.*).html$ goster.php?id=$1&baslik=$2 [L,NC]

Yukarda gördüğünüzüzere goster-(.*)-(.*)  daki her (.*) için bir değer atayabileceğimi söylüyorum. id=$1&baslik=$2 de de sıra ile $1 inci kısım yani query stringdeki ID nin ilk (.*) a, $2 kısım yani baslik kısmınıda ikinci (.*) atayacağımı belirttim.

Yani .htaccess dosyasına bunları yazıp /root a attıktan sonra bilgisayarınızın tarayıcısından www.sitenizadi.com/goster-3-yazi-adi.html ye girerseniz girdiğiniz değer sunucuda goster.php?id=3&baslik=yazi-adi şeklinde yorumlanır.

Yani sözün özü burda aslında bir cinlik yapıyoruz biz Laughing aslına bakarsanız   goster-3-yazi-adi.html yerine goster-3-oylesine-bir-baslik-iste.html de yazsam goster-3-dfdsf8dsf9sdfhgkdfsghkjffd.html de yazsam yine de sayfa görüntülenir, Çünkü bizim için mühim olan İD kısmı ID yi atadıktan sonra başlığa ne istrsen yaz :)

hah şimdi herşey tamam artık Sunucumuza Yorumlama yeteneği kazandırdıktan sonra linkleri güzelleştirmeye yani aslı Permalink kısmı şimdi başlıyor.

 

Mesela www.harmankaya.org/yazi.php?id=3 ü permalink yapmadan önce nasıl gösteriyorduk. şöyle değilmi  diyelim < a href = " yazi.php?id=< ? e c ho $yaziid ; ?  >  \ > diye gosterdiğiniz linkleri < a href = " goster-< ? e c ho $yaziid ; ? >-< ? e c ho $yazibaslik ; ? > \ >  yapacaksınız bu kadar yani azcık php bilginiz varsa bunuda yaaprsınız artık Innocent.

Neyse ama sonra göreceksiniz ki linklerde türkçe karakterlerin veya +%&''^+ şeklinde karakterlerin hatalı çıktığı bununda sayfa görüntülenmesi hatası verdiğini göreceksiniz. Bizde bunun için bir fonksiyon geliştirdik .

function permayap($deger) {
$turkce=array("ş","Ş","ı","(",")","'","ü","Ü","ö","Ö","ç","Ç"," ","/","*","?","ş","Ş","ı","ğ","Ğ","İ","ö","Ö","Ç","ç","ü","Ü");
$duzgun=array("s","S","i","","","","u","U","o","O","c","C","-","-","-","","s","S","i","g","G","I","o","O","C","c","u","U");
$deger=str_replace($turkce,$duzgun,$deger);
$deger = preg_replace("@[^A-Za-z0-9\-_]+@i","",$deger);
return $deger;
}
 

Ne mi yapıyor herhangi bir metindeki boşluk yerine - (tire) koyuyor ayrıca bütün Türkçe karakterlerden arındırıyor ( Ne kötü birşey keşke türkçe karakterleride yorumlayabilsek ben çok seviyorum Ş yi Ç yi Ö yü Embarassed ) Neyse kullanımıda basit zaten $yenibaslik = permayap($eskibaslik)

Yazar: Erhan Harmankaya 

Not: Kaynak göstererek dilediğinizce yayınlayabilirsinizWink

Detaylı BilgiArkadaşına GönderYazıcıya Aktar


İM'le

Yorumlar( 34 )

Yorum Gönder

#1 gönderenGönderen: Hazar gönderme zamanıZaman: 20:15:45/

Yeap


#2 gönderenGönderen: Erhan gönderme zamanıZaman: 12:43:34/

Bu arada işe yaradığını da söylemeden geçemeyeceğim. Domaintools.com tarafından site hakkında bir araştırma yaptım ve aldığım Sonuç Mükemmel

Website Title: Harmankaya
Title Relevancy 100%
Description Relevancy: 40% relevant.
AboutUs: Wiki article on Harmankaya.org
SEO Score: 96%


#3 gönderenGönderen: Evrim gönderme zamanıZaman: 17:01:23/

Hocam bilgin için tşkler.

fakat ben

index.php?id=4&baslik=test&action=6

bu nasıl olacak ?


#4 gönderenGönderen: Erhan gönderme zamanıZaman: 00:52:07/

RewriteRule ^index-(.*)-(.*)-(.*).html$ index.php?id=$1&baslik=$3&action=$2 [L,NC]

şeklinde olur ve index-1-2-baslik.html ise id=1 action=2 deki sonucu verir


İstersen sen direk sitenin kodlarını yapıştır cevap vermeye çalışırım :)


#5 gönderenGönderen: lycianna gönderme zamanıZaman: 21:53:28/

function permayap($deger) {
$turkce=array("ş","Ş","ı","(",")","'","ü","Ü","ö","Ö","ç","Ç"," ","/","*","?","ş","Ş","ı","ğ","Ğ","İ","ö","Ö","Ç","ç","ü","Ü");
$duzgun=array("s","S","i","","","","u","U","o","O","c","C","-","-","-","","s","S","i","g","G","I","o","O","C","c","u","U");
$deger=str_replace($turkce,$duzgun,$deger);
$deger = preg_replace("@[^A-Za-z0-9\-_]+@i","",$deger);
return $deger;
}

Ne mi yapıyor herhangi bir metindeki boşluk yerine - (tire) koyuyor ayrıca bütün Türkçe karakterlerden arındırıyor ( Ne kötü birşey keşke türkçe karakterleride yorumlayabilsek ben çok seviyorum Ş yi Ç yi Ö yü Embarassed ) Neyse kullanımıda basit zaten $yenibaslik = permayap($eskibaslik)

* * * *

Şu kısmı anlayamadım, bu kodu htaccess'e mi yazıcaz yoksa php sayfamıza mı? hangi php sayfamıza bir de :)


#6 gönderenGönderen: Erhan gönderme zamanıZaman: 22:08:58/

bak onu PHP dosyana yazıyorsun şunun için kullandık elinde bir title(başlık) var diyelim o başlık da şu olsun

Pire İçin Yorgan Yakmak

php sayfanda bu başlık mesela $baslik ile mi ekrana basılıyor, sende şöyle yapıyorsun başlığı SEO ya uygun hale getirmek için permayap($baslik) yapıyorsun ve artık başlık şu hali alıyor

Pire-Icin-Yorgan-Yakmak halini alıyor. artık bunu <a href="" > şeklinde link verirken kullanabiliyorsun faydası o yani

Hala anlamadıysan bir kaç örnek daha verebilirim Çekinmeden sorabilirsin


#7 gönderenGönderen: lycianna gönderme zamanıZaman: 21:43:32/

Fatal error: Cannot redeclare permayap() (previously declared in /home/****/public_html/news/news.php:213) in /home/****/public_html/news/news.php on line 213

hatası aldım :(

şu şekilde kullandım:
$baslik = permayap($subject);

ama sanırım yanlış yere yazıyorum ben bunu, anlamadım. line 213'te de, permeyap fonksiyonu başlıyor... Neden olabilir bu hata?


#8 gönderenGönderen: Erhan gönderme zamanıZaman: 21:55:52/

Bak en üstede fonksiyonu tanıtman lazım tamam sen doığru kullanmışsın birsorun yok da permayap() fonksiyonunun ne olduğunu tanıtmamışsın.

Yukarda verdiğim fonksiyonu sayfanın en üstüne < ? den sonra koy tamamdır


#9 gönderenGönderen: volkan gönderme zamanıZaman: 10:20:12/

gercekten usta bır ılk okul ogretmenı gıbı anlatmıssınız
yanı bızım gıbı daha ısın basında olar ıcın bu uslup ınanın cok ferahlatıcı
ancak ben sorunumu cozemedım
sıze adrtesımı gonderıyorum
bana yardımcı olursanız sevınırım bu html lın vermekle ılgılı

http://----.com/ilan_detay.php?id=86

bu da .htaccess da yazanlar
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

<IfModule sapi_apache2.c>
php_flag register_globals on
</IfModule>

php_flag magic_quotes_gpc on


#10 gönderenGönderen: Erhan gönderme zamanıZaman: 10:47:22/

Sorunuzu detaylıca yanıtlamaya çalışacağım. Ama öncelikle şunu söyliyeyim .htaccess dosyasınıza göre Register Global diye tabir ettiğimiz önünde $ olan bütün değişkenlerin global olduğunu tarif etmişsiniz. Güvenlik problemi dolayısıyla adresinizi silmek zorunda kaldım.

Gelelim konumuza ;

Bahsettiğiniz şekilde bir linki
ilan-3-sahibinden-tertemiz-ev.html şeklinde yapabilirsiniz.

Bunun için php dosyasındaki linklerde gerekli düzenlemeleri yaptıktan sonra .htaccess dosyanızın üst kısmına

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^ilan-(.*)-(.*).html$ ilandetay.php?id=$1&baslik=$2 [L,NC]

ekleyebilirsiniz. Burada $1 ilanın ID sini $2 ise başlığını temsil ediyor. Php dosyasının html yorumlanmadan önceki şekli ilan.php?id=2&baslik=denemedsffsd gibi bir bakıma

Bu arada Bu yaz ben de didimdeyim :)


#11 gönderenGönderen: lycianna gönderme zamanıZaman: 20:47:51/

Erhan ya

şimdi öncelikle permayap fonksiyonunu hallettim sonunda :)
**/index.php?action=fullnews&id=2&b=Yazinin-Basligi
olarak çağırabiliyorum yazıyı... Burda da sorun yok...

Ama ***/yazi-2-Yazi-Basligi.html linkini çağırınca "hata: içeriğin ID numarası girilmedi" hatası veriyor script... ID'yi bulamıyor yani...

Ancak şöyle bir durum var, htaccess'i ***/yazi-2_Yazi-Basligi.html olarak tanımlayınca sorun ortadan kalkıyor. Çizgi değil de, alt çizgi olarak yani...

Şimdi "-" karakterini google boşluk kabul ediyor sanıyorum, ama _ karakterini de aynı şekilde kabul eder mi? Ederse sorun yok ama arama motorunda "Yazının Başlığı" aramasında "_" karakterinden ötürü sorun çıkar mı sence?

Çok başını ağrıttım biliyorum


#12 gönderenGönderen: Uğur gönderme zamanıZaman: 15:22:31/

Merhaba,

yanılmıyorsam küçük bir hata var.

RewriteRule ^goster-(.*)-(.*).html$ goster.php?id=$1&baslik=$2 [L,NC]

satırında goster-(.*) yerine goster-(.)

olamlıydı gibi geliyor bana.

Benden önceki mesajda verilen hatanın sebebi de bu olabilir.

Selamlar...


#13 gönderenGönderen: Uğur gönderme zamanıZaman: 15:30:03/

Mesajımı düzeltiyorum...

(.) dersek tek basamaklı bir id kabul eder.. Bu durumda iki basamaklı yani 10, 15 gibi idleri alamayız..

Bunun yerine tire işareti olmama, ya da sadece alfanumerik olma şartı koyabiliriz (id\'lerin numara olduğunu varsayarsak)

Az Reg. Express. bilgimle şöyle olabileceğini tahmin ediyorum.

goster-([^\\-]*)

Yanlışsa bir zahmet Erhan Bey düzeltsin.


#14 gönderenGönderen: Erhan gönderme zamanıZaman: 15:54:12/

Uğur;

Şöyle söyliyeyim orda (.*) oraya bir ID geleceğini belirtiyor örneğimizde ama oraya sayılsal bir değer değil bir kelime de atayabiliyorsunuz. Yani basamak olarak bir anlam ifade etmiyor (.*) Ki tek basamak olsaydı şu anda görüntülediğiniz 75 numaralı ID ye sahip yazıyı okuyamıyor olacaktınız

Bahsettiğiniz olay sanırım şu:

ReWriteRule ^([a-z0-9_-]+)/([0-9]+)$ index.php?ulke_id=$1&s=$2 [L,NC]

www.site.com/turkiye/5/ gibi bir adresle URL ye erişim sağlanır yani (.*) kullanmamıza gerek kalmadı.

Evet böyle bir kullanımda olabiliyor.

İlginiz için teşekkürler



#15 gönderenGönderen: Tamer gönderme zamanıZaman: 10:36:00/2008-01-25

<?

function permayap($baslik) {
$turkce=array("ş","Ş","ı","(",")","'","ü","Ü","ö","Ö","ç","Ç"," ","/","*","?","ş","Ş","ı","ğ","Ğ","İ","ö","Ö","Ç","ç","ü","Ü");
$duzgun=array("s","S","i","","","","u","U","o","O","c","C","-","-","-","","s","S","i","g","G","I","o","O","C","c","u","U");
$deger=str_replace($turkce,$duzgun,$deger);
$deger = preg_replace("@[^A-Za-z0-9\-_]+@i","",$deger);
return $deger;
}

$baslik="tamer yalçın";

echo"$baslik";


?>

hata veriyor


#16 gönderenGönderen: Murat YILMAZ gönderme zamanıZaman: 14:15:31/2008-01-25

mod rewrite ile yazılmış gördüğüm en iyi türkçe kaynak diyebilirim.
elinize sağlık.


#17 gönderenGönderen: Erhan gönderme zamanıZaman: 17:20:45/2008-01-25

Murat YILMAZ;

Övgülerin için teşekkür ederim. Elimden geldiğince yardımcı olmaya çalışıyorum.

Tamer YALÇIN;

Fonksiyon içeriğiyle oynamayacaksınız. Fonksiyonu sitede gördüğünüz haliyle siteniz dosyalarının üst kısmına mesela session_start() var ise hemen altına yapıştırın. Sonra kullanımı şu şekilde

$ornek="Tamer YALÇIN";
$sonuc=permayap($ornek);
echo $sonuc;
// Tamer-YALCIN şeklinde sonuç alırsınız

Kolay gelsin.


#18 gönderenGönderen: aligurbuz gönderme zamanıZaman: 17:49:08/2008-01-25

hacı yalnız yazılar divden taşmış,hoş bir goruntu cıkmamıs ortaya...onu bir duzeltsen daha iyi olur.sabit table icine al yazılarını taşmazlar.


#19 gönderenGönderen: Tamer Yalçın gönderme zamanıZaman: 15:19:16/2008-01-26

Sorunu Çözmüştüm Yinede Teşekkürler Şimdi Başka Bir Sorunum Var

Options
RewriteEngine on

RewriteRule ^haber-(.*)-(.*).htm$ news.php?readmore=$2&baslik=$1 [L,NC]


bu var birde goster.php var ikisini alt alta koyunca hata veriyor değişkenler mi karışıyor anlamadım


#20 gönderenGönderen: aligurbuz gönderme zamanıZaman: 19:54:07/2008-01-27

tamer kardeş,göster.php ende haber kuralına uyuyorsa,alttaki htacces kodun calısmaz.dolayısıyla dikkat etmeniz gerekecek.kurallara uyanları varsa / su sekilde ayırmanız tavsiye ederim.saglıcakla.


#21 gönderenGönderen: Tamer Yalçın gönderme zamanıZaman: 09:10:52/2008-01-28

Demek İstediğim Şu
Options
RewriteEngine on

RewriteRule ^(.*)-(.*).html$ uye.php?id=$2&baslik=$1 [L,NC]

RewriteRule ^haber-(.*)-(.*).htm$ news.php?readmore=$2&baslik=$1 [L,NC]

Böyle yazmak istiyorum haber ve uye.php nin içeriği farklı ama aynı dizindeler ... nasıl yapabilirim


#22 gönderenGönderen: Erhan gönderme zamanıZaman: 09:21:44/2008-01-28

İkisini alt alta koyunca hata vermemesi lazım. Çünkü SEO sadece tek dosya değişikliğiyle yapılmıyor. Ben bile sitemde yaklaşık 25 satır kullanmışım.

Hata olarak ne hatası veriyor onu da söylersen. Çünkü .htaccess içerisinde kodlarda bir problem yaptıysan Internal Server Error vermesi gerekiyor. Eğer hata öyle değilse PHP dosyalarında değişiklik yapılması gerekiyor.


#23 gönderenGönderen: Tamer Yalçın gönderme zamanıZaman: 09:34:46/2008-01-28

Internal Server Error


hatası veriyor aynen öyle kodlar ... yorumda belirttiğim gibi


#24 gönderenGönderen: Erhan gönderme zamanıZaman: 10:03:02/2008-01-28

Apache konfigürasyonunuzda problem olabilir belki de. Sabah sabah da öyle fikir yürütemiyorum. Bakıyorum ama yaptıklarınız çok mantıklı geliyor


Şunu deneyebilirmisin acaba:

<?php
$mod_name = 'mod_rewrite';

if ($mod_name)
{
if (apache_is_module_loaded($mod_name))
{
echo '<span style="color:crimson;">' . $mod_name . '</span> is avaible';
}
else
{
echo '<span style="color:crimson;">' . $mod_name . '</span> is unavaible';
}
}

function apache_is_module_loaded($mod_name)
{
$modules = apache_get_modules();
if (in_array($mod_name, $modules))
{
return true;
}
else
{
return false;
}
}

?>



Mod_Rewrite yüklüyse avaiable diye uyarı alman gerekiyor. Bir dene istersen


#25 gönderenGönderen: Tamer Yalçın gönderme zamanıZaman: 10:09:11/2008-01-28

Düzeldi ben başka şeyler kullanıyormuşsum aşağıda

msn : dangerous@tr.cc

Eklerseniz Sevinirim Takıldığım Yer Olduğunda Sormam İçin


#26 gönderenGönderen: Erhan gönderme zamanıZaman: 13:39:10/2008-01-28

Düzeltebildiğinize sevindim. :)

Üzgünüm ki; MSN'den destek vermiyorum. Forumlarda özel mesajla dahi cevap vermiyorum.

Sorularınızı İLETİŞİM kısmından sorarsanız, zaten paylaşılması gereken soru ise ben siteye koyuyorum

kolay gelsin


#27 gönderenGönderen: önder durmuş gönderme zamanıZaman: 15:32:36/2008-02-16

öncelikle merhaba.. gerçekten çok güzel bir şekilde anlatmışsın, tebrik ederim.. yalnız takıldığım bir-iki nokta var..

öncelikle, okuduğum bir çok makalede php dosyalarının uzantılarını html olarak değiştirmemiz gerektiği söyleniyor.. ancak sen o konuya hiç değinmemişsin? buna gerek yok mu?

bir diğer konu da, bazı sitelerde de hede.com/konu-basligi.html vb şeklinde yapıyorlar.. o şekilde yapmak istesek ne gibi bir kod yazılması gerekiyor?

şimdiden teşekkürler..

dn: tam gönder diyecekken fark ettim; tepede harmankaya beta yazan yazının alt metninde türkçe karakter sorunu var..


#28 gönderenGönderen: Erhan gönderme zamanıZaman: 00:13:54/2008-02-17

Önder Durmuş, bilgilendirmen için teşekkür ederim. Ama ben bir karakter hatası göremedim :) Tarayıcından kaynaklanabilir düşüncesindeyim.

Sorularına gelirsek www.siteadi.com/hede-hodo.html şeklinde linkler yapabilirsin. Ama bunu yapmak için örnek vermek gerekirse;

yazigoster.php?id=3 şeklinde olan bir yazıyı yazigostr.php?ad=Makalenin Adı şeklinde çağırabilmen gereklidir.

Ondan sonra yapman gereken makaleleri eklersen SEO başlığını da aynı tabloda farklı bir field olarak ekletirsin yani kısaca veritabanın şu şekilde olabilir:

id|makaleadi|makaleseoadi|tarih vs.....

makaleleri çağırırken

SELECT * FROM makaleler WHERE makaleseoadi='$var'

şeklinde çağırıyorsun. Ondan sonra gerisi zaten yukarıdaki anlatılanlar. Yapılabilir ama makaleleri ID yerine karakter olarak sorgulamak sunucuyu epeyce yoracaktır. Ben tavsiye etmiyorum en azından :)

Diğer soruna gelirsek. Yukarda anlattıklarım zaten sayfaları .html olarak kaydetmeyip .html olarak "yorumlayabilmek" içindir.

Pek de açık olmadı ama umarım anlatabilmişimdir

Görüşmek üzere


#29 gönderenGönderen: emrah gönderme zamanıZaman: 22:12:28/2008-02-24

#mod_rewrite baslangıc

RewriteEngine on

#konular
RewriteRule ^arsiv-konu([0-9]*).0.html arsiv.php?board=$1

#basliklar
RewriteRule ^arsiv-baslik([0-9]*).0.html arsiv.php?topic=$1

#arsiv.php
RewriteRule ^arsiv.html arsiv.php


#30 gönderenGönderen: Emrah gönderme zamanıZaman: 22:16:08/2008-02-24

Pardon Erhan elimden kaçtı .htaccsess in içinde yukarıdakilerin haricinde bişey yok ne iş. O kadar site crawler larla falan uğraştım didindim 1 ay 10 gün oldu daha 12 tane yalandan link veriyo oda eski temadan üyelirmin bilgisni veriyor neyi eksik yaptım acaba diyecem ama. Neyi yaptımki sorusu daha mantıklı oluyor bu durumda :D bu boş olunca bi anlamı yok dimi


#31 gönderenGönderen: Erhan gönderme zamanıZaman: 00:29:48/2008-02-25

Merhaba Emrah;

Baktım da tam anlayamadım durumunu. Şimdi anladığım kadarıyla SEO için yapıyorsun fakat birşeyler ters gitti nedir diye soruyorsun.

.htaccess dosyanda bir problem görünmüyor açıkacsı. arsiv.php için gerekli düzenlemeleri yapmışsın arsiv.php dosyan artık kullanıma hazır.

Peki sen normal sayfadaki linkleri düzelttin mi?

Artık üyelerin arsiv.php?board=345 şeklinde değilde

arsiv-konu-435.html şeklinde girmeleri için linklerini de değiştirmen gerekiyor.


#32 gönderenGönderen: Memurdostu gönderme zamanıZaman: 11:59:57/2008-04-30

Blogspot'ta yapılabilir mi bu uygulama?


#33 gönderenGönderen: memurdostu gönderme zamanıZaman: 13:37:20/2008-04-30

pardeon bu yazıya yorumlara aboneliğimi iptal ettim yanlışlıkla. bir yorum daha yazayım iptal geçersiz olsun.

Bu arada blogspotta yapılabir mi bu uygulama bir cevap lütfen.


#34 gönderenGönderen: Erhan gönderme zamanıZaman: 09:59:28/2008-05-01

Malesef yapamazsınız. Bu yazdıklarımı yapabilmek için sitenizin kaynak kodlarını görebilmeniz gerekmektedir


Blog Kategori

Son YAZILAR

sON YORUMLAR

Sponsor Reklamlar


Blogging Blogs - BlogCatalog Blog Directory
Personal blogs
Listed in LS Blogs the Blog Directory and Blog Search Engine
Bloggapedia, Blog Directory - Find It!
Blog Directory - photarium
Firefox 2