PHP ve .htaccess ile adreste dosya uzantısı gizlemek (Permalink – URL ReWrite)
|
Bu sitede de gördüğünüz, adresleri klasörmüş gibi göstermeye yarayan teknik URL Rewrite tekniği. Amacımız www.emrahustun.com/gunluk/index.php?sayfa=hakkimda adresi yerine www.emrahustun.com/gunluk/hakkimda adresini kullanmak. Ziyaretçiler açısından rahatlık olması yanı sıra birincil sebebi SEO. ( Search Engine Optimization – yani arama motorlarının sitemizi sevmesi Şöyle yapacağız;
Normalde www.emrahustun.com/gunluk/herhangibirsey adresine girsek 404 hatası verir ya, işte bu 404′leri yakalayarak bir sayfaya yönlendireceğiz. Bunu da .htaccess ile yapacağız. .htaccess içine şunları yazalım; mod.rewrite açıksa şunları yap diye başlıyoruz, eğer talep edilen adres gerçek bir dosya adı veya dizin değilse ( yani 404 ise ) uzantısını “index.php?sayfa=” sonrasına at diyoruz. Böylece www.emrahustun.com/gunluk/hebelegubelup adresi www.emrahustun.com/gunluk/index.php?sayfa=hebelegubelup adresine yönleniyor ama ziyaretçi bunu görmüyor. Apache arka planda yapıyor bu işi. Sonuç olarak biz de index.php içinde $sayfa=$_GET[sayfa] ile talep edilen adresi alıyor işlemlerimizi yapıyoruz. Not: ayrıca bu yöntemi dinamik 404 sayfası üretmek için de kullanabilirsiniz. “hata.php?sayfa=” ya yönlendirerek mesela. Bu yöntemin etkin bir örneği şu sitede mevcut: umuttepe.org İyi PHPler, iyi Apacheler, iyi SEOlar dilerim efenim. |
Emrah Üstün
2 Eylül, 2008 saat 19:18
PHP ve .htaccess ile adreste dosya uzantısı gizlemek (URL ReWrite)…
Bu sitede de gördüğünüz, adresleri klasörmüş gibi göstermeye yarayan teknik URL Rewrite tekniği….
9 Eylül, 2008 saat 12:16
Merhabalar,
Güzel site çalışmanız ve bilgileriniz için öncelikle teşekkür etmek istiyorum. Bilgi paylaştıkça yücelir..
Benim sorum şu olacaktı.
http://www.emrahustun.com/gunluk/index.php?sayfa=hebelegubelup&id=3
Yukardaki linki http://www.emrahustun.com/gunluk/gubelup/3 a çevirmek için .htaccess e ne eklememiz gerekiyor ?
Bu arada, $sayfa=$_GET[sayfa] ile mi alınacak? yoksa $_REQUEST[sayfa] ile mi ?
GET variableları formdan GET olarak yollanmışsalar alınıyor diye biliyorum. Şayet linkteki query stringler formdan yollanmamışsa, onların _REQUEST ile alınıyorular. .
9 Eylül, 2008 saat 13:35
@Sercan,
ikinci bir bölü için htaccess’e birşey eklemeye gerek yok, aslında ekleyerek yapmak ta mümkün ama öyle yaparsan her eklediğin değişken için yeniden htaccess’i güncellemek gerekir.
Daha kolay yolu şu;
sen http://www.emrahustun.com/gunluk/oonabernaptinoisi/iyilikugrasiyoruz/4 adresine bağlantını ver, sonra gelen $sayfa verisini işle.
explode ile bölüleri ayır.
$veridizisi=explode(“/”,$adres);
böylece $veridizisi[0]‘da oonabernaptinoisi, $veridizisi[1]‘de iyilikugrasiyoruz, $veridizisi[2]‘de de 4 olacaktır.
Sanırım güzel bir çözüm.
Gelelim diğer soruya. Adrese yüklenen verilere get verisi denir. Mantığı da şu, biz bir adres yazıp entera bastığımızda http’nin get protokolü çalışır, yani sunucuya bana bu adresi ver diyoruz.
Yani direk adres verilerini alırken $_GET kullanırız. Formdan yollanmış veya direk girilmiş farketmez. $_request ise tüm verileri içerir. get, post, cookie. Bunlardan direk veri çekmek için. Güvenlik açısından adresten veri çekiyorsan get kullan. Hatta $sayfa=mysql_real_escape_string($_GET[sayfa]); kullan, sql enjection korunma.
Başarı, sevgi, sağlık, mutluluk…
10 Eylül, 2008 saat 12:58
hmmm,
Verdiğniz bilgi için teşekkürler.
Başarılarınızın devamını dilerim.
23 Eylül, 2008 saat 12:15
Uzun süredir bu sisteme geçip geçmemekte kararsızdım ancak müzik sitelerinin bir çoğu artık bu şekilde hizmet veriyor ve benim de geçme vaktim geldi de geçiyor bile. Yazın için teşekkürler bu arada çok kısa bir şekilde olayı çok güzel anlatmışsın.
4 Ekim, 2008 saat 17:59
Güzel bir yazı, gayet açık anlatmışsınız. Teşekkürler.
28 Aralık, 2008 saat 22:07
Verdiğin bilgi tam ne yapacam acaba dediğim bir konuydu emrahustun. Verdiğin bilgi için çok teşekkürler…
28 Aralık, 2008 saat 22:09
Hah birde sormak istediğim, SEO için uygunluk açısından klasör gibi göstermekle .html olarak göstermek arasında bir fark varmı.
29 Aralık, 2008 saat 10:16
Bu konuda kesin bir bilgi yok. html olarak göstermesen de o klasörün ana sayfası index.html olarak algılanma durumu da var.
Bence farketmez. Burada önemli olan URL’deki GET bilgilerini kaldırmak.
Ve de bir sitenin ana dizininin PageRank’ı yüksekse alt dizinde düşecek veya artacak diye birşey de yok. Önemli olan bağlantı sayısı.
Yani bağlantı sayısı aynı olduktan sonra
site.com/duyurularilesite.com/duyurular.htmltamamen aynı.Google diyor ki get bilgileri sadece site içi işlemlerde kullan, içeriği get’e bağlama.
Yani
index.php?sayfa=duyurular&goster=10yerineduyurular.php?goster=10olsun. Mesela böyle içeriği değiştirmedik, sadece kullanıcıya o an 10 tane gösterdik. Kaç tane sıralanacağını ben bilmiyim diyor Google, aynı içeriği farklı URLlerle verme bana diyor.29 Aralık, 2008 saat 23:38
Anladım bu aydınlatıcı bilgiler için çok teşekkür ederim.
İyi çalışmalar…
26 Ocak, 2009 saat 11:02
Sade açıklayıcı güzel bir anlatım.
İyi çalışmalar..
30 Mayıs, 2010 saat 14:54
Saygıdeğer Kardeşim Emrah Aşağıda yazılan Htacces
http://www.ahmetkomurcu.com web sitemde devamlı geliyor siliyorum yine geliyor lutfen bunu ben web sitemden tamamen nasıl sile bilirim yardım etlürfen Elinize ve Emeğinize Sağlık Saygılarımla Ahmet Kömürcü
info@ahmetkomurcu.com adresime yollarsanız sevinirim
# HostRule
RedirectMatch /(.*)\.html$ http://thermal-visi
…
RewriteCond %{HTTP_REFERER} .*flickr.*
RewriteRule ^(.*)$ http://thermal- [R=301,L]
# /HostRule
30 Mayıs, 2010 saat 15:48
Ahmet, siten hacklenmiş. Biryere iş yapan bir dosya atmış veya bir dosyanın içeriğine kod parçacığı eklemiş olabilir. .htaccess’i değiştiren kodu bulmak lazım. Muhtemelen site ziyaret edildikçe o kod çalışıyor ve .htaccess i tekrar değiştiriyor.