Merhaba yazılım severler,
Bu yazımda örnek olarak hazırlanmış bir .htaccess kodlarını sizlerle paylaşmak istiyorum,
.htaccess önemi neden bu kadar büyük ; sef link yapımında en büyük yardımcılarımızdan birisi çünkü,
Öncelikle linklerinizi TR karakterlerden ve diğer boşluk vs verilerden ayırt etmek için şu kodu kullanınız
/**
* @param $string
* @return mixed
*/
function permalink($string)
{
$find = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '+', '#');
$replace = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', 'plus', 'sharp');
$string = strtolower(str_replace($find, $replace, $string));
$string = preg_replace("@[^A-Za-z0-9\-_\.\+]@i", ' ', $string);
$string = trim(preg_replace('/\s+/', ' ', $string));
$string = str_replace(' ', '-', $string);
return $string;
}
// Kullanımı
$deger = "Bu Türkçe Bir Yazıdır";
echo permalink($deger);
Örnek Kodlar:
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^index_([0-9]+).html$ ./index.php?sayfa=$1 [L]
RewriteRule ^index.html.* index.php [NC]
RewriteRule ^sifremiunuttum.html.* sifremiunuttum.php [NC]
RewriteRule ^uyari.html.* uyari.php [NC]
RewriteRule ^profil/(.*)$ profil.php$1 [NC]
RewriteRule ^haberler/(.*)$ haberler.php$1 [NC]
RewriteRule ^urunler/(.*)$ urunler.php$1 [NC]
RewriteRule ^hizmetler/(.*)$ hizmetler.php$1 [NC]
RewriteRule ^referanslar/(.*)$ referanslar.php$1 [NC]
RewriteRule ^galeri/(.*)$ galeri.php$1 [NC]
RewriteRule ^yoneticiler/(.*)$ yoneticiler.php$1 [NC]
RewriteRule ^insan-kaynaklari/(.*)$ insan-kaynaklari.php$1 [NC]
RewriteRule ^iletisim/(.*)$ iletisim.php$1 [NC]
RewriteRule ^yeniuyelik/(.*)$ uyeol.php$1 [NC]
RewriteRule ^kategoriler.html.* kategoriler.php [NC]
RewriteRule ^haber/(.*)/(.*).html haberdetay.php?Id=$1 [NC,L]
RewriteRule ^urun/(.*)/(.*).html urun.php?Id=$1 [NC,QSA,L]
RewriteRule ^etiket/(.*)/(.*).html urun.php?Id=$1 [NC,QSA,L]
RewriteRule ^sayfa/(.*)/(.*).html sayfa.php?Id=$1 [NC,L]
RewriteRule ^kategori/(.*)/(.*)_([0-9]+).html kategori.php?Id=$1&sayfa=$3 [L,NC]
RewriteRule ^haber-kategori/(.*)/(.*).html h-kategori.php?Id=$1 [L]
RewriteRule ^kategori/(.*)/(.*).html kategori.php?Id=$1 [L]
RewriteRule ^g-kategori-(.*)-(.*)_([0-9]+).html g-kategori.php?Id=$2&sayfa=$3 [L,NC]
RewriteRule ^galeri-kategori/(.*)/(.*).html g-kategori.php?Id=$1 [L]
RewriteRule ^haberler_([0-9]+).html$ ./haberler.php?sayfa=$1 [L]
RewriteRule ^urunler_([0-9]+).html$ ./urunler.php?sayfa=$1 [L]
RewriteRule ^hizmetler_([0-9]+).html$ ./hizmetler.php?sayfa=$1 [L]
RewriteRule ^referanslar_([0-9]+).html$ ./referanslar.php?sayfa=$1 [L]
RewriteRule ^galeri_([0-9]+).html$ ./galeri.php?sayfa=$1 [L]
ErrorDocument 404 /404.html
RewriteRule ^404.html.* 404.php [NC]
RewriteRule ^sitemap.xml$ sitemap.php
Burda görüldüğü gibi,
öncelikle “RewriteEngine On” özelliği açık oluyor, yani adres çubuğuna yazılan link tekrar yazılıyor, nasıl;
RewriteRule ^index.html.* index.php [NC]
Yukarıda yazılı olan index.html adres çubuğuna yazıldığında böyle bir sayfa yok aslında ama sunucu bu kod ile index.php sayfasını çağırıyor.
Başka bir satırı inceleyelim;
RewriteRule ^hizmetler/(.*)$ hizmetler.php$1 [NC]
Burdada aynı mantık söz konusu, adres çubuğuna örneğin ” www.sanalicerik.com/hizmetler/ ” yazıldığında sunucu bize hizmetler.php sayfasını çağıracaktır.
RewriteRule ^urunler_([0-9]+).html$ ./urunler.php?sayfa=$1 [L]
Burdaki linkte ise bir ürün girilmiştir ve link şu şekildedir;
www.sanalicerik.com/urunler/5/deneme-urunu.html
sunucuda burda kullanacğı kısım ilk “/” dan sonraki urunler, burdan hangi sayfayı çağıracağını anlayacak,
ikinci “/” dan sonra rakam geliyor, burdandan veri tabanında o ürüne ait id numarasını alıp istenilen ürünün istemciye sunacak.
son kısımda SEO için arama motorlarında deneme ürünün diye aranıldığında rahatlıkla üst sıralara çıkabilmeniz için.
Umarım faydalı bir yazı olmuştur, herkese kolay gelsin…
Hocam öncelikle bu konuyu ele alıp açıklama getirdiğiniz için teşekkürü bir borç bilirim.
Bu .htaccess dosyasını php mysql siteye nasıl entegre ederiz? Sadece htacess dosyası ile mi SEF Link olayını gerçekleştirmiş olacağız? datebase’imizde bunun için bir tablo oluşturup verileri çekmemiz gerekmiyor mu? Gerekiyorsa boş bir vaktinizde bunun için de ayrı bir anlatım metni oluşturabilir misiniz? bu konuyu da sizden öğrenmek, eksiksiz öğrenmemizi sağlayacağından dikkatle takip edeceğim.
Saygılar.
Bunu mysql dosyasına entegreye gerek yok. Siz bu .htaccess dosyasını ftp ana dizine attığınızda linklerinizi dosyada nasıl belirttiyseniz o şekilde çalışır zaten. Örneğin linkte iletisim.html yazıyordur. .htacces dosyasında .html i .php ye çevir dediğinizde sunucu direk olarak iletisim.php dosyasını çalıştıracaktır. Adres çubuğunda yine iletisim.html yazacaktır. Saygılarımla.
Selam aleykum hocam kolay gelsın…
benım yapmış oldugum .htaccess’de
uzantı veriyorum normal bir şelilde
http://www.sanalicerik.com/iletisim/ çalışıyor
Lakın
http://www.sanalicerik.com/urunler/5/deneme-urunu.html
Sayfa boş çıkıyor
kod bu :
#Options +FollowSymlinks
RewriteEngine on
RewriteRule ^index_([0-9]+).html$ ./index.php?sayfa=$1 [L]
RewriteRule ^index.html.* index.php [NC]
RewriteRule ^anasayfa/(.*)$ index.php$1 [NC]
RewriteRule ^urunler_([0-9]+).html$ ./urunler.php?sayfa=$1 [L]
RewriteRule ^urunler/(.*)$ urunler.php$1 [NC]
RewriteRule ^kategori/(.*)/(.*)/ kategori.php?Id=$2 [L]
RewriteRule ^galeri/(.*)$ galeri.php$1 [NC]
RewriteRule ^haberler/(.*)$ haberler.php$1 [NC]
RewriteRule ^hizmetler/(.*)$ hizmetler.php$1 [NC]
RewriteRule ^yoneticiler/(.*)$ yoneticiler.php$1 [NC]
RewriteRule ^insan-kaynaklari/(.*)$ insan-kaynaklari.php$1 [NC]
RewriteRule ^referanslar/(.*)$ referanslar.php$1 [NC]
RewriteRule ^iletisim/(.*)$ iletisim.php$1 [NC]
RewriteRule ^urun/(.*)/(.*)/ urun.php?Id=$2 [NC,QSA,L]
RewriteRule ^haberler_([0-9]+).html$ haberler.php?sayfa=$1 [L]
RewriteRule ^haber/(.*)/(.*)/ haberdetay.php?Id=$2 [NC,L]
RewriteRule ^kategori-(.*)-(.*)_([0-9]+).html kategori.php?Id=$2&sayfa=$3 [L,NC]
RewriteRule ^referanslar_([0-9]+).html$ referanslar.php?sayfa=$1 [L]
RewriteRule ^galeri-kategori-(.*)-(.*).html g-kategori.php?Id=$2 [L]
RewriteRule ^galerikategori-(.*)-(.*)_([0-9]+).html g-kategori.php?Id=$2&sayfa=$3 [L,NC]
RewriteRule ^galeri_([0-9]+).html$ galeri.php?sayfa=$1 [L]
RewriteRule ^s/(.*)-(.*)/ sayfa.php?Id=$2 [NC,QSA,L]
RewriteRule ^sk/(.*)-(.*)/ sayfakategori.php?Id=$2 [NC,QSA,L]
RewriteRule ^(.*)/([0-9]+)/ kategori.php?Id=$1&sayfa=$2 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/ kategori.php?Id=$1
ErrorDocument 404 /404.html
RewriteRule ^404.html.* 404.php [NC]
RewriteRule ^sitemap_(.*).xml$ sitemap.php?page=$1 [L,NC]
RewriteRule ^rss.xml.* rss.php [NC]
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
Asıl sayfa linkini alabilir miyim ?
İyi günler,
Öncelikle bilgiler için teşekkür ederim.
Benim sorunum şu:
http://www.siteadi.com/haberler.php?id=36&isim=roma
böyle bir adresi
http://www.siteadi.com/haberler/roma gibi bir görünüme çevirmek için nasıl bir şey yazmam lazım.
Yardımcı olursanız sevinirim.
Öncelikle ilgi ve yorum için teşekkürler, tabiki şöyle olacak kodumuz;
http://www.siteadi.com/haberler.php?id=36&isim=roma
linkiniz bu
.htaccess kodu
RewriteRule ^haberler/(.*).html haberdetay.php?Id=$36&isim=roma [NC,L]
Bu şekilde deneyebilirmisiniz bi ?
Burada yaptığımız işlem 36 id numaralı haberi dediğiniz şekilde yazma. Deneyin çalışmazsa site linkini verin bende bakayım.
Dediğiniz gibi olmadı
Linki veriyorum
https://./yurtdisi/yurtdisi_turlar.php?ad=36&isim=roma
Benim İstediğim
https://./yurtdisi/yurtdisi_turlar/roma
böyle birşey yapabilir miyim
Hocam bana, .htaccess dosyanızı mümkün ise bu haber sayfasına ait php kodunuzu gönderebilir misiniz ?
çözelim bu işi çok uzamasın 😀 info@sanalicerik.com
mail gönderdim hocam
ilgilenirseniz sevinirim.
Hocam Çok teşekkür ederim yardımlarınız için.
Sayenizde sorunu çözdüm süpersiniz
Ben teşekkür ederim ilgi ve alaka için. 😀
Merhaba hocam ,
linkim http://gozdeaksesuar.com/?/=35&Gözde-Home böyle ancak ben /?/=35 kısmınında görünmesini istemiyorum .htaccess dosyasında nasıl bir işlem uygulamam gerekir ?
Merhaba, önce ilgi için teşekkürler. 35 kısmının görünmesini istemiyorsanız yapacağınız işlem ,35 yerine veritabanında numerik değil harf olarak bir birincil anahtar atamanız gerekli. Yani 35 dediğiniz veritabanında o bilgiyi çektiği sütun. bunu yerine bilgiyi kaydederken id kısmına yine 35 yazsın birde id2 diye sütun açın ve bunuda gozde-home diye yazdırın. linki yazarkende id değil id2 yi çekin olacaktır. Yapamazsanız eğer info@sanalicerik.com mail adresine mail atın cep numaranızıda yazın halledelim
merhaba hocam. Benim problemim şu: normalde http://www….biz/isim.html şeklinde olan linklerimi htcess den http://www…..biz/kategoriadı/isim.html şekline çevirdim ve bu gün farkettimki bunca zamandır index alan bütün sayfalar 404 vermiş. Benim yapmak istediğim http://www….biz/isim.html bu linkleri http://www….biz/kategoriadı/isim.html bu şekil olan doğru linklere toplu olarak yönlendirmek. Bir kaç tane tek tek yaptım ama müthiş uğraştırıyor. sabahın bu saatine kadar araştırdım doğru düzgün birşey bilen yok. Yardımınızı bekliyorum.
Linklerini düzenlemek istediginiz . Sitenin adresjni alabilirmiyim
Hocam hala cevap bekliyorum sizden
Merhaba benim panel htaccess problemim var ve bi türlü çözemedim siteadi.com/panel yapıyorum kullanıcı adı ve şifre yazıyorum onaylandı diyor index.php den anasayfa.php ye atması gerekiyor fakat tekrar index.php ye düşüp kullanıcı adı şifre istiyor rica etsem yardımcı olabilirmisiniz.
siteadi.com/panel yaptıktan sonra yönlendirilen sayfaya bakmanız lazım. anasayfa.php ye yönlendirdiğine dair kod varmı ?
Birde varsa mevcut htaccess kodlarını yazarsan bakayım.