PHP HTACCESS KULLANIMI ve HTACCESS İLE PHP SAYFALARI HTML GÖSTERMEK
Htaccess web alanında birçok faydalı yönlendirme işlerinin yapılmasını sağlayan, Apache web sunucularında olan etkili ve çok amaçlı bir ayar dosyasıdır.
PHP projelerimizi htaccess kullanarak kullanıcı dostu URL’ler yapmamıza ve bir takım yollarla güvenlik önlemleri de almamıza yarayan ve bu alanda en favori olaylardan bir tanesidir.
#HTACCESS İÇİN AÇIKLAMA NOTLARI
^ İşareti başlangıcı
$ İşareti Bitişi
[0-9] : 0 ile 9 arasındaki tüm sayılar olabilir.
[A-Z] : Büyük harfli A’dan Z’ye tüm harfler olabilir.
[a-z] : Küçük harfli A’dan Z’ye tüm harfler olabilir.
[A-Za-z0-9] : Bir harf ya da rakam olabilir.
(*) işareti herhangi bir şey anlamında olup sıfır karakter de olur der ve sınırsız karaktere kadar gider.
(+) ise yıldızdan farklı olarak en az 1 karakter olmasını şart koşar.
(?) ise tek bir harf için joker karakter niyetine kullanılır.
1-) PHP ile yapılan Sitemizde firma-hakkinda.php Sayfasına Link ile Metinsel Değişken göndererek oluşturulmuş Linkleri Düzenlemek için
| Hakkımızda | İletişim |
Şeklindeki Yazılara Link Verirken
Hakkımızda => İçin firma-hakkinda.php?sayfa=hakkimizda
İletişim => İçin firma-hakkinda.php?sayfa=iletisim
Şeklinde Link ile değişken gönderdiğimizi ve o değişkeni de firma-hakkinda.php sayfasında $_GET[“sayfa”] şeklinde çekip if else ile kontrol ederek bir sayfa içerisinde birden fazla sayfa içeriğini görüntülettiğimiz bir yapının ayrı ayrı html sayfalarmış gibi gösterilmesi için
Yani Hakkımızda sayfasına Tıklayınca Adres Çubuğunda Linki
firma-hakkinda.php?sayfa=hakkimizda
yerine
bt-bilgisayar-hakkimizda.html
————–
İletişimin Linki
firma-hakkinda.php?sayfa=iletisim
yerine
bt-bilgisayar-iletisim.html şeklinde görünsün istiyorsak.
—————-
Öncelikle .htaccess isimli bir dosya oluşturacağız. Bilgisayarımız bu dosyayı oluşturmamıza izin vermeyeceğinden biz dosyayı htaccess.txt olarak oluşturup içine aşağıdaki kodları ekleyeceğiz. Sunucuya atınca da htaccess.txt yi .htaccess ismine çevireceğiz
Htaccess içeriği
—————————————-
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^bt-bilgisayar-(.*).html$ firma-hakkinda.php?sayfa=$1 [L,NC]
—————————————–
Şimdi kodu biraz açıklayalım
^bt-bilgisayar-(.*).html$ firma-hakkinda.php?sayfa=$1
Başlangıcı bt-bilgisayar- olacak ondan sonra bir değişken olacak yani firma-hakkinda.php?sayfa=iletisim kısmında sayfa değişkenine atayacağımız değeri burada iletisim şeklinde tanımlamamız gerektiğini ve $ bitişi ifade ettiğinden dolayı da sayfanın .html ile biteceği anlatılıyor.
Htaccess dosyayısını bu şekilde tanımladıktan sonra sayfamızda verdiğimiz linkleri de değiştireceğiz. Yani
firma-hakkinda.php?sayfa=hakkimizda
yerine
bt-bilgisayar-hakkimizda.html
————–
İletişimin Linkini
firma-hakkinda.php?sayfa=iletisim
yerine
bt-bilgisayar-iletisim.html olarak değiştireceğiz.
Bu Linke tıklayınca adres çubuğunda bt-bilgisayar-hakkimizda.html gözükecek.
bt-bilgisayar-hakkimizda.html — bt-bilgisayar-(.*).html tanımından oradaki (.*) hakkimizda yı alacak ve sanki
firma-hakkinda.php?sayfa=$1 yerine hakkimizda yı koyacak
firma-hakkinda.php?sayfa=hakkimizda ymış gibi çalıştıracak.
SONUÇ: htaccess içinde gerekli tanımlamayı yap. Sonra da PHP sayfadaki linkleri buradaki kurala uygun hale getir. İşlem tamamdır.
2-) PHP ile yapılan Sitemizde urunlerimiz.php Sayfasına Link ile sayısal Değişken göndererek oluşturulmuş Linkleri Düzenlemek için
Adres Çubuğunda Linki
urunlerimiz.php?urun_id=1
yerine
8-urunlerimiz-buzdolabi.html şeklinde göstermek için
Aynı şekilde htaccess dosyasını oluştur.
Htaccess dosya içeriği
——————————-
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+)-urunlerimiz-(.*).html$ urunlerimiz.php?kategori_id=$1 [L,NC]
——————————
id numarası sayısal olduğu için ([0-9]+)kullanıyoruz bu id yi $1 içine atıyor
Sonra da sayfada verdiğimiz urunlerimiz.php?urun_id=1
linkinini yerine
-urunlerimiz-.html
yazıyoruz.
Sondaki [L,NC] L ise eğer o satırdan sora eşleşme olursa bile çalıştırmamamsı içindir
Sondaki [L,NC] NC ise sunucuda büyük küçük harf duyarlılığı varsa onu etkisiz hale getirir
RewriteRule ^(.*).html$ $1.php [L,NC] Başta gördüğünü sondaki gibi çalıştır demektir.
# RewriteRule ^(.*)-uye-bak-(.*).html$ uyebak.php?id=$1&ad=$2 [L,NC] – Şeklinde bir satırda birden fazla değişken kullanılacak ise (.*) içindekini $1 e, sonraki (.*) $2, sonraki $3 şeklinde tanımlanır.
3- ) PHP Uzantılı bir sayfayı html göstermek Yani uye-ol.php sayfasına tıklanınca uye-ol.html gibi görünsün için de
Htaccess içeriği
—————————
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*).html$ $1.php [L,NC]
—————————
Olarak düzenleyip. Sonra da Linkini uye-ol.html ver işlem tamamdır.
4-) Birkaç özelliği içinde bulunduran htaccess dosya içeriği ve linklerinin son hali
Htaccess dosya içeriği
———————————
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+)-urunlerimiz-(.*).html$ urunlerimiz.php?kategori_id=$1 [L,NC]
RewriteRule ^([0-9]+).urun-(.*).html$ urun-detay.php?urun_id=$1 [L,NC]
RewriteRule ^bt-bilgisayar-(.*).html$ firma-hakkinda.php?sayfa=$1 [L,NC]
RewriteRule ^(.*).html$ $1.php [L,NC]
———————————–
Bu sayfada urunlerimiz.php, urun-detay.php, firma-hakkinda.php ve php uzantılı sayfaları html yapacak ayar ve tanımlar yer almaktadır.
a-) firma-hakkinda.php sayfasını aç oradaki linkleri değiştir.
b-) urunlerimiz.php sayfasını aç oradaki linkleri değiştir Ama bu urun-detay.php için yapılacak ayardır.
Detay İçin Tıkla
c-) Solmenu sayfasını aç oradaki linkleri değiştir. Ama bu urunlerimiz.php için yapılacak ayardır.
d-) Solmenu sayfasını aç oradaki uye-ol.php sayfasını uye-ol.html göstermek için de oradaki linki
Diğer Yönemler —–
Htaccess; web alanında birçok faydalı yönlendirme işlerinin yapılmasını sağlayan, Apache web sunucularında olan etkili ve çok amaçlı bir ayar dosyasıdır.
Web projelerinizi bir çok şekilde düzene sokup kullanıcı dostu URL’ler yapmamıza ve bir takım yollarla güvenlik önlemleri de almanıza yarayan ve bu alanda en favori olaylarımdan bir tanesidir.
Hadi şimdi sırayla bu yukarıda saydıklarımın nasıl yapıldığına bakalım.
Htaccess’in en popüler kullanım alanlarından birisi budur. Ve sizin de en sevdiğiniz özelliklerinden birisi olacağına inanıyorum.
Bu olayı kullanmanın 2 ideal yöntemi var; birincisi önceden öğrendiğimiz GET metodu ile sayfa.php?sayfa=iletisim şeklinde, ya da POST metodu gibi “REQUEST_URI” ile kullanmak. Hangisi kolayınıza geliyorsa onu seçebilirsiniz fakat benim favorim “REQUEST_URI”den yana.
Öncelikle bir içerik sayfa.php‘miz olsun ve örnek amaçlı switch ile sayfaları tanımlayalım:
if (!isset( $_GET [ 'sayfa' ])) { // eğer boşsa anasayfa varsayalım. $sayfa = 'anasayfa' ; } else { $sayfa = $_GET [ 'sayfa' ]; } switch ( $sayfa ) { case 'iletisim' : echo '<h2>İletişim</h2>' ; echo '<p>Bize bilgi@site.com adresinden ulaşın!</p>' ; echo '<p><a href="/">Anasayfa</a></p>' ; break ; case 'hakkinda' : echo '<h2>Hakkında</h2>' ; echo '<p>Bizi tanıyan tanır, yeniler örnek alır, tanımayanlar ibret alır.</p>' ; echo '<p><a href="/">Anasayfa</a></p>' ; break ; case 'anasayfa' : echo '<h2>Sitemize hoşgeldiniz!</h2>' ; echo '<p><a href="/hakkinda">Hakkında</a><br/>' ; echo '<a href="/iletisim">İletişim</a></p>' ; break ; default : // hiç birisi değilse 404 varsayalim echo '<h2>Bulunamadı!</h2>' ; echo '<p>Böyle bir sayfamız henüz yok, değiştirilmiş ya da silinmiş olabilir.</p>' ; } |
Şuan htaccess kullanmadan bu sayfamızı “sayfa.php, sayfa.php?sayfa=hakkinda, sayfa.php?sayfa=iletisim” şeklinde kullanabiliriz. Şimdi gelelim bunu kullanıcı dostu yapmamıza, bu kısımda kod kısmımızda herhangi bir şey değiştirmemize gerek yok.
Sitemizin ana dizinine “.htaccess” adında dosya oluşturuyoruz. Eğer FTP programınız ya da işletim sisteminiz böyle bir dosya oluşturmanıza izin vermiyorsa, not defterinden boş bir sayfa açıp kodları içerisine yazıp, farklı kaydet diyip, “Tüm dosyalar” seçeneğini seçip “.htaccess” yazıp bu dosyayı oluşturabilirsiniz.
İçerisine şu satırları yazıyoruz:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L] |
Bu işlemi yaptıktan sonra Htaccess; kullanıcılar eğer olmayan bir sayfaya girmeye çalışırlarsa, yani normalde /hakkinda ya da /iletisim gibi bir dizinimiz olmadığı için, 404 hata sayfasına değil de bizim sayfa.php dosyamıza yönlendirecek.
Fakat yönlendirirken girilmiş olan sayfayı bizim dosyamıza “sayfa” GET parametresi olarak gönderek. Yani bu şekilde site.com/deneme diye girildiğinde arkaplanda çalışacak olan sayfa “site.com/sayfa.php?sayfa=deneme” olacaktır.
Sonuç olarak yine aynı sistem çalışsa da kullanıcılar artık php dosyalarının adını ya da diğer GET parametresi uzantılarını yazmasına gerek kalmadan temiz ve akılda kalıcı bağlantılarla sitenizde gezebiliyor.
Diğer yöntemden tek farkı $_GET[‘sayfa’] yerine girilen adresi $_SERVER[‘REQUEST_URI’] ile okuyoruz. Fakat burada bize ilk baştaki “/” işaretini de veriyor (“/hakkinda” şeklinde). Bunun için ilk karekteri substr fonksiyonu ile atlıyoruz.
Yani kod kısmımızın ilk 5 satırını şöyle değiştireceğiz:
$sayfa = substr ( $_SERVER [ 'REQUEST_URI' ], 1); // ilk "/" karakterini atlıyoruz. if (! empty ( $sayfa )) { // eğer boşsa anasayfa varsayalım. $sayfa = 'anasayfa' ; } |
.htaccess dosyamızda da bu yöntem için bir satırlık değişiklik yapıyoruz, GET parametresi tanımladığımız kısmı siliyoruz:
RewriteRule ^(.*)$ sayfa.php?sayfa=$1 [QSA,L] // yerine RewriteRule ^(.*)$ sayfa.php [L] |
Bu blog üzerinde bir örneğini görebilirsiniz; phpr.org diye girmeye çalıştığınızda sizi otomatik olarak www.phpr.org adresine yönlendirir. Buradaki mevzu kişinin zevkine de bağlı olsa da daha çok arama motorları ile alakalı. Bazı durumlarda Google sitenizin “www” ekli olan ve olmayan halini farklı iki site gibi değerlendirebiliyor. Mesela bir sitenizin bir çok yerde linki hem “www” ile hem de olmadan paylaşılınca kısmen domain popülerliğini dağıtmış oluyor.
Htaccess ile “www” olmadan girildiğinde ekleyerek kalıcı yönlendirme yapıldığında tüm ilgiler tek bir subdomain ve domainde toplanıyor.
RewriteEngine On RewriteCond %{HTTP_HOST} phpr\.org [nc] RewriteRule (.*) http://www.phpr.org/$1 [R=301,L] |
İsterseniz tam tersini de yapabilirsiniz;
RewriteEngine On RewriteCond %{HTTP_HOST} www\.phpr\.org [nc] RewriteRule (.*) http://phpr.org/$1 [R=301,L] |
Bir dizin yönlendirmek için de çok basit olarak tek bir satır ile yapabiliyoruz. Dikkat edilecek nokta dizini ne şekilde yönlendireceksiniz? Genel olarak kalıcı (301) ya da geçici (302) durumları kullanılır. Dahası için buraya bakabilirsiniz.
Eğer kalıcı yönlendirme (301) derseniz arama motorları girilen adresdeki indexleri yeni yönlenen adres ile değiştirir. Geçici derseniz herhangi bir değişiklik yapmadan yönlenen adrese girer ve tarar.
RewriteEngine On RewriteRule ^eski_adres$ /yeni_adres [R=301,L] |
Hata sayfalarının durum kodlarını öğrenmek için şuraya bakabilirsiniz. Bunlardan en yaygın olarak bildiğimiz; 404 kodlu sayfa bulunamadı, bir diğer örnek olarak da 403 kodlu giriş izni olmayan sayfa hatasıdır.
Dikkat etmeniz gereken nokta; yukarıda SEO ve kullanıcı dostu bağlantılar oluşturma yönteminin temeli, olmayan sayfaları yani 404 kodlu sayfaları bizim belirli dosyamıza yönlendirme olduğu için o yöntemi kullanırken bu aşağıdaki kodlar ile 404 sayfası tanımlamaya çalışmak faydasız olacaktır.
ErrorDocument 403 /izin_yok.html ErrorDocument 404 /bulunamadi.html |
Tüm bir siteyi olduğu gibi isterseniz sadece belirli klasörlere göre de IP erişim engeli koyabilirsiniz. Bunu yapmak için hazırladığınız “.htaccess” dosyasını ilgili alt klasörün içerisine koymanız yeterli.
deny from all #herkesin girmesini engelle allow from 127.0.0.1 #bu ip adresine izin ver allow from 192.168.0.0/255 #ya da bu ip blokunun girmesine izin ver |
Ayrıca sadece “deny from all” diyerek kullanıcılar tarafından erişimini tamamen engelleyebilirsiniz.
İstemediğiniz ya da sitenizde aşırı dolaşıp yoran botları basit bir htaccess hamlesiyle engelleyip sunucunuzu rahatlatabilirsiniz.
Şu adreste genel olarak mimlenmiş kötü amaçlı olduğu düşünülen tüm botların bu yöntem için olan listesini bulabilirsiniz. Ben örnek amaçlı bir kaç tanesini yazacağım.
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] RewriteCond %{HTTP_USER_AGENT} ^Zeus RewriteRule .* - [F] |
Ayrıca bu yöntem ile mobilden giren kişileri de algılayıp mobil sitenize yönlendirilmesinde de kullanabilirsiniz.
RewriteCond %{REQUEST_URI} !^/mobil_dizin/.*$ RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ /mobil_dizin/ [L,R=302] |
Bu yöntem için öncelikle basit bir şifre dosyası oluşturmamız gerekiyor. Dosyanın içerisine her satıra bir kullanıcı ekleyebiliyoruz. Ve her satırda “isim:şifre” şeklinde kullanıcı adı ve şifreleri tanımlıyoruz.
Şifre dosyamızın adını .htpasswd yapıp .htaccess dosyamızda belirteceğmiz bir yere yerleştiriyoruz. Sonrasında bu bilgiler ile şifrelemek istediğimizin dizinin içerisine aşağıdakileri yazıyoruz.
AuthUserFile /dosya/dizini/.htpasswd AuthType Basic AuthName "Gizli Dizin" |
Hotlink adıyla bilinen bu yöntem sayesinde sitenizde olan müzik, resim, video gibi içeriklerin başka sitelerde gösterilip, oynatılmasını engellemenizi sağlıyor. Bu sayede sunucunuzun bant genişliğinin başka siteler üzerinden harcanmasına engel oluyorsunuz.
Bu yöntemde başka siteden bizdeki bir resim görüntülenmek istendiğinde ona istenilen resim yerine bir hotlink uyarı resmi gösterebiliyoruz. Bunun çokça örneğini imageshack.us’da görmüşsünüzdür.
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?phpr\.org[NC] RewriteRule .*\.(zip|mp3|avi|wmv|mpg|mpeg)$ http://www.phpr.org/hotlink.jpg [R,NC,L] |
Farkettiyseniz yukarıda gösterdiğim yöntemlerin neredeyse hepsinde ilk “RewriteEngine on” komutu var. Eğer bu yöntemlerden bir kaçını birlikte kullanacaksanız tekrar tekrar bu satırı eklemenize gerek yok. Bunu sadece htaccess dosyanızın en başında bir kere yazmanız yeterlidir.
Diğer önemli husulardan birisi de birden fazla komut kullanırken işlemlerin sıralamasının öneminin olduğunu unutmayın. Yani eğer ilk önce 404 hata sayfası uyarı komutunu yazıp, alt satırına SEO dostu bağlantı komutlarını yazarsanız, önce 404 hata sayfa komutu tetiklenip ilgili yere gideceği için SEO dostu bağlantı yöntemi çalışmaz.
Parantez içlerinde kullanılan NC, L ve R harflerinin anlamları:
Diğer tüm ifadeler için buraya bakabilirsiniz.
İnternet ortamındaki sosyal ağ sağlayıcıları üzerinden metin, görüntü,...
İŞLETMELER TARAFINDAN PERSONELE VERİLEN RAMAZAN PAKETLERİNİN VERGİSEL SONUÇLARI 1...
524 sıra No.lu Vergi Usul Kanunu Tebliği düzenlemesi ile İçişleri Bakanlığı’nca...
Bursa SGK il Müdürü Erhan Karaca nın Kısa çalışma ödeneği ile ilgili […]
Eksik Gün Mevzuatı — 28 Gün Çeken Aylarda Prim Ödeme Gün Hesabı […]
Son günlerde merak ve tartışma konusu olan Elektronik beyanname ve aracılık sorumluluk...
Sosyal Güvenlik Kurumu (SGK) prim borcu olan 4.5 milyon kişiyi affetmeye hazırlanıyor....
Yeni yılda; aşağıda maddeler halinde özetlediğim hususlara dikkat etmeleri halinde,...
Dikkat: Defter tasdikinden önce, VUK’nun 179 ve 180.maddeleri gereği 1.sınıftan...
Türk Ticaret Kanunu’nun Defter tutma yükümlülüğü başlıklı 64 üncü...
Bugünkü soru-cevap kısmını tamamen iş güvenliği ile ilgili konulara ayırdık....
I- GİRİŞ 213 sayılı Vergi Usul Kanunu’nun 148, 149 ve mükerrer 257. maddelerinin...
Askerlik her yurttaşımızın vatan borcu. Bugün, askere giden işçilerin haklarını...
Kanun, tüketici kredileri ve kredi kartları ile ilgili sözleşmeler, kart üyelik...
Bilindiği üzere gider pusulası 213 sayılı Vergi Usul Kanunun 234 üncü maddesinde...
İşsizliğin azaltılması ve istihdamın artırılması ile kadınların ve...
(Bu yazı : 30.585 kez okundu)ÖZEL İNŞAATLARLA İLGİLİ ÖZELLİKLİ HESAPLAR VE İŞLEYİŞİ 1. GENEL...
(Bu yazı : 26.292 kez okundu)A.Giriş :
Bakanlığımıza intikal eden olaylardan, basit usulde vergilendirilen...
Ölüm vergi hukuku açısından mükellefiyeti ve vergi cezasını kaldıran...
(Bu yazı : 14.019 kez okundu)Kasa farklarının değerlemesi ve muhasebe kayıtları Kasa hesabı işletmelerin...
(Bu yazı : 13.814 kez okundu)Türkiye Muhasebe Standartları Kurulu tarafından hazırlanan Türkiye...
(Bu yazı : 12.346 kez okundu)Son günlerde merak ve tartışma konusu olan Elektronik beyanname ve aracılık...
(Bu yazı : 10.913 kez okundu)Bankaların vadesiz hesaplardan haksız yere kestikleri Hesap işletim ücretlerinin...
(Bu yazı : 9.476 kez okundu)STAJYER ÖĞRENCİLERE YÖNELİK SSK VE ÜCRET UYGULAMASI Stajyer öğrenciler;...
(Bu yazı : 8.989 kez okundu)6111 Sayılı Bazı Alacakların Yeniden Yapılandırılması ile Sosyal Sigortalar...
(Bu yazı : 8.381 kez okundu)Okur sorusu: 1950 doğumluyum, ilk işe giriş tarihim 1990, prim gün sayım...
(Bu yazı : 8.167 kez okundu)KDV tevkifat uygulamasına ve bu uygulamadan doğan iade taleplerinin yerine getirilmesine...
(Bu yazı : 7.716 kez okundu)Şehir ve köy gibi yerleşim yerlerinin dışında kurulu baraj ve tünel inşaatı,...
(Bu yazı : 7.033 kez okundu)Vergi Usul Kanunu’nun 328’nci maddesi hükmü gereği; amortismana tabi iktisadi...
(Bu yazı : 6.365 kez okundu)Vergi Usul Kanununun 413 üncü maddesinde “Mükellefler, Gelir İdaresi Başkanlığından...
(Bu yazı : 6.176 kez okundu)