Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Webmaster Kaynaklari » Makaleler » Mod_Rewrite Kılavuzu


Comment
 
LinkBack Article Tools
Old 26.09.2007  
 
Üyelik Tarihi: 09.10.2003
Yer: İstanbul
Yaş: 20
Mesaj: 193
Görsel: 5
Mod Rewrite Kılavuzu


mod_rewrite’ı veya htaccess dosyaları ile yönlendirme yapmayı duymayan kalmamıştır. standart bir htaccess dosyasına bakacak olursak:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.PHP [L]

bu kurallar Wordpress’in rewrite kuralları.

1. satırda Rewrite motorunun kullanılacağını belirtiyoruz.
2. satırda bu kuralların bütün kök ve alt dizinlerde geçerli olduğunu söylüyoruz.
3. satırda REQUEST_FILENAME değişkeninde tutulan isimde bir dosya eğer yoksa diyoruz
4. satırda REQUEST_FILENAME değişkeninde tutulan isimde bir klasör eğer yoksa diyoruz
5. satırda bütün istekleri index.PHP'ye gönder deyip L (LAST) bayrağı ile bu conditionları sağlayan durumlarda yapılacak son rewrite'ın bu olduğunu belirtiyoruz.

Detaylı İnceleme

RewriteEngine on|off

Apache’de , öntanımlı olarak rewrite motoru kapalı olarak geliyor. mod_rewrite ile yönlendirme yapacaksak eğer ilk satırda RewriteEngine On’a ihtiyacımız var.

RewriteOptions Seçenek


Burada Kullanabileceğimiz iki seçenek var. MaxRedirects değeri ve inherit opsiyonu. MaxRedirects aynı isteğin kaç kere yeniden yazılacağını belirliyor. inherit ise MaxRedirets’in değerinin bir üst klasörde geçerli olan değer olmasını söylüyor. Öntanımlı olarak MaxRedirects=10, inherit ise kapalı.

RewriteBase URL

Fiziksel yer ile sanal yer farklı ise RewriteBase ile isteklerin nereye geldiğini belirtmemiz gerekiyor. Örneğin sunucuda /home/yiit/ahmet/mehmet klasöründe bulunan dosyalarımız url olarak www.site.com/cenk yolu ile çağırılıyorsa /home/yiit/ahmet altındaki .htaccess’de


Kod:
RewriteBase /cenk
bulundurmamız gerekiyor.

RewriteCond var1 var2

RewriteCond’u eğer var1 var2′ye uyuyorsa bir sonraki satıra geç şeklinde bir if yapısı olarak düşünebiliriz. şöyle örnekler sunabiliriz:


Kod:
RewriteCond %{REQUEST_URI} yiit.PHP
bu satır, eğer %{REQUEST_URI}, yiit.PHP ise diyor. yiit.PHP’nin başına ünlem koyarak (!yiit.PHP) REQUEST_URI, yiit.PHP değilse diyebilirdik.


Kod:
RewriteCond %{HTTP_HOST} gro.tiiy.yiit.org
burada ise eğer HTTP_HOST, gro.tiiy.yiit.org ise diyoruz. .htaccess dosyasında düzenli ifadeler (regular expressions - regex) de kullanabiliriz. Aynı örneği geliştirelim:

Kod:
RewriteCond %{HTTP_HOST} !www.yiit.org
RewriteCond %{HTTP_HOST} ([^.]+).yiit.org
burada subdomain eğer www dışında bir şeyse dedik. ileride subdomain ismine erişmek istersek %1 değişkenini kullanabiliriz. burada dikkat edilmesi gereken şey iki rewritecond arasında bir AND olduğu. yani sadece bu ikisini de sağlayan durumlar rewriterule’a geçebilecek. eğer ikisinden birini sağlamasını isteseydik OR bayrağını kullanacaktık:

Kod:
RewriteCond %{HTTP_HOST} !www.yiit.org [OR]
RewriteCond %{HTTP_HOST} ([^.]+).yiit.org
Kullanabildiğimiz Değişkenler

RewriteCond ile oluşturduğumuz değişkenlere %n şeklinde ulaşabiliyoruz. örneğin

Kod:
RewriteCond %{HTTP_HOST} ^(.*).(.*)
böyle bir kuralımız varsa birinci (.*) yani HTTP_HOST’un ilk noktadan önceki parantezlerle ayrılmış kısmı %1, ilk noktadan sonraki parantezlerle ayrımış kısmı %2 oluyor.

RewriteRule değişkenleri ise $n şeklinde. rewritecond ve rewriterule değişkenlerini aynı kuralın içinde kullanmak mümkün:

Kod:
RewriteCond %{HTTP_HOST} ([^.]+).yiit.org
RewriteRule ^(.*)$ yok.PHP?adres=$1&sd=%1
bu durumda gro.tiiy.yiit.org/ahmet.PHP aslında yiit.org/yok.PHP?adres=ahmet.PHP&sd=gro.tiiy olarak işlem görecek.

Sunucu değişkenleri ise %{SUNUCU_DEGISKENI} şeklinde kullanılıyorlar. tam listesini yazının sonuna ekliyorum.

RewriteCond’da kullanabileceğimiz iki bayrak var. bunlar NC ve OR. NC (nocase) büyük-küçük harf duyarsız işlem yapılmasını söylüyor. OR ise daha önce söylediğim gibi iki rewritecond’u öntanımlı olan and yerine or ile bağlamasını söylüyor.

bunların dışında RewriteCond parametreleri var. Wordpress örneğinde gördüğümüz -f ve -d dışında -s ve -l var. -s’nin işlevi -f gibi, fakat yaratılmış bir dosyanın var olup olmadığından fazla olarak bu dosyanın boyutunun 0′dan büyük olup olmadığına da bakıyor. -l ise böyle bir symlink olup olmadığına bakıyor. bu dört parametre de ünlem işareti ile birlikte anlamlarının tersine kullanılabilir. (!-f)

RewriteRule

Örnekle başlayalım:

Kod:
RewriteRule ^(.*)$  yok.PHP?adres=$1 [L]
Bu kural gelen bütün istekleri yok.PHP’de $_GET[’adres’] değişkeninin içine atar. yani /index.PHP’ye girmek istedi diyelim ki kullanıcı, sunucu ona aslında yok.PHP?adres=index.PHP’yi gösterir. Ama bu bir yönlendirme şeklinde olmaz, adres aynı kalır.

RewriteRule bayrakları

[bayrak] şeklinde kullanılıyorlar.

R=301: Belirttiğiniz adrese 301 yönlendirmesi yapar.
F: Forbidden belirttiğiniz adres 403 döndürür. Kullanıcılara sayfayı görmesi için izin verilmez. RewriteCond ile birlikte kullanılıp toplu adres engellemesi yapılabilir.
L: Bu rewriterule’ın son yönlendirme olduğunu söyler. Eğer bu bayrak olmazsa mod_rewrite maxredirects değişkeniniz doğrultusunda sürekli yönlendirme yapacaktır.
NC: büyük küçük ayrımı yapmadan rewrite yapar.
QSA: GET ile gelen isteği de adrese ekler.


ErrorDocument hatakodu URL

.htaccess dosyamızda ErrorDocument kullanarak yönlendirme de yapabiliriz. Örnek kullanımı:
Kod:
ErrorDocument 404 http://www.site.com/404.PHP
ErrorDocument 403 http://www.site.com/yetkisiz.PHP
server Değişkenleri

headers:

HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT

connection & request:

REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE

server internals:

DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

system stuff:

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

specials:

API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
__________________
gro.tiiy.yiit.org || Detaylı .htaccess kılavuzu, WireShark, Ruby, vs.

Mesaj tapoem tarafından 06.10.2007 (17:37) yeniden düzenlendi..
tapoem şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 26.09.2007  
BYK
 
BYK's Avatar
 
Üyelik Tarihi: 08.04.2003
Yer: Ankara
Yaş: 20
Mesaj: 689
Görsel: 8
Re: Mod_Rewrite Kılavuzu


Budur! Eline sağlık dostum
__________________
Hayata gülümse!

Fotoğraf Sergim - www.fototonik.com/madbyk@gmail.com/Denemeler
BYK şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 27.09.2007  
 
s5prin's Avatar
 
Üyelik Tarihi: 16.12.2006
Yer: istanbul
Yaş: 26
Mesaj: 470
Re: Mod_Rewrite Kılavuzu

Kısa, özet, konuyla ilgili yeterli bir kaynak olmuş. Eline sağlık.
__________________
imzaya sponsor
s5prin şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 30.09.2007  
 
ilksen's Avatar
 
Üyelik Tarihi: 16.01.2003
Yer: Sakarya, Ankara
Yaş: 26
Mesaj: 448
Görsel: 36
Re: Mod_Rewrite Kılavuzu

Sonunda...

Çok iyi oldu, teşekkürler...
__________________
Disconnected
ilksen şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 09.10.2007  
 
Üyelik Tarihi: 10.11.2006
Yer: İstanbul
Mesaj: 43
Mod_Rewrite Kılavuzu

URL Rewrite'da mantığı konusunda tıkandığım iki nokta var.

Birincisi; gördüğüm çoğu URL Rewrite işlemlerinde URL'nin bir bölümünde yazı, kategori vs.nin ID no.su bulunuyor.
Fakat Wordpress, URL Rewrite işlemini ID kullanmadan yapıyor.
Bunu nasıl yapıyordur?

Bir diğeri de bizzat karşılaştığım bir sorun;
Veritabanında yer alan yazı ve kategori tablolarının birincil indeksleri aynı değerde yani ID.
Bu durumda da URL Rewrite yapıldığında kategori ile yazı ID'leri karışıyor.
Ayırmak için ne tür bir yol izlenmeli?
Yoksa her tablonun indeksi farklı mı olmalı?
Virtuozzo şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 09.10.2007  
 
Üyelik Tarihi: 09.10.2003
Yer: İstanbul
Yaş: 20
Mesaj: 193
Görsel: 5
Re: Mod_Rewrite Kılavuzu

Wordpress bütün istekleri index.PHP'ye gönderip post-slug'ı veritabanında sorgulatarak id'yi buluyor.

ikinci sorunuzu anlamadım.
__________________
gro.tiiy.yiit.org || Detaylı .htaccess kılavuzu, WireShark, Ruby, vs.
tapoem şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 09.10.2007  
 
Üyelik Tarihi: 10.11.2006
Yer: İstanbul
Mesaj: 43
Mod_Rewrite Kılavuzu

Kod:
Kategori Tablosu:
id	kategori	sira
1	Günlük		1
2	Genel		3

Yazı Tablosu:
id	baslik		  yazi		  tarih
1	Başlık 1	Yazı 1		01.10.2007
2	Başlık 2	Yazı 2 		02.10.2007
3	Başlık 3	Yazı 3 		03.10.2007
Herhangi bir sayfadan /1-baslik-1.HTML linkine de tıklansa /1-gunluk.HTML linkine de tıklansa aynı sayfa açılıyor, birincisinde Başlık 1 yazısının, ikincisinde ise Günlük kategorisinin açılması gerekirken.
Virtuozzo şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 09.10.2007  
BYK
 
BYK's Avatar
 
Üyelik Tarihi: 08.04.2003
Yer: Ankara
Yaş: 20
Mesaj: 689
Görsel: 8
Re: Mod_Rewrite Kılavuzu

E tabi bu durumda "gunluk" ya da "baslik" şeklinde yazılan kısmın da PHP'ye bir parametre olarak gönderilmesi ve sorgulamanın ona göre yapılması gerekiyor
__________________
Hayata gülümse!

Fotoğraf Sergim - www.fototonik.com/madbyk@gmail.com/Denemeler
BYK şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 10.10.2007  
 
Üyelik Tarihi: 10.11.2006
Yer: İstanbul
Mesaj: 43
Mod_Rewrite Kılavuzu

Veritabanından veri sorgulamasını ID'ye göre yaptığı için başlık veya kategori isminin URL'de geçmesi herhangi birşeyi değiştirmiyor maalesef.
Virtuozzo şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 10.10.2007  
BYK
 
BYK's Avatar
 
Üyelik Tarihi: 08.04.2003
Yer: Ankara
Yaş: 20
Mesaj: 689
Görsel: 8
Re: Mod_Rewrite Kılavuzu

Anlaşamadık Demek istediğim şu, veritabanında aramayı yine ID'ye göre yapıyoruz zaten ancak ek parametre olarak(örn. tip) aldığımız şey "baslik"sa başka bir tabloda "kategori"yse başka bir tabloda arama yapacak.

Yazdığın ilk mesajdan bunlar için iki ayrı tablon olduğunu anlıyorum ki zaten karışıklık olması için de iki ayrı tablo olması gerekiyor. Sen de 2. bir değişkenle hangi tabloyu kullanacağını belirleyeceksin sorun çözülmüş olacak. Yoksa benim kaçırdığım bir nokta mı var?
__________________
Hayata gülümse!

Fotoğraf Sergim - www.fototonik.com/madbyk@gmail.com/Denemeler
BYK şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Sponsorlu Bağlantılar
Zoque.Forum
Reklam
Comment

Etiketler

301 yonlendirme , 404 yonlendirme , apache , htaccess , mod_rewrite



 
Zoque'a hoşgeldiniz!
Zoque 27.02.1999 tarihinde yayın hayatına başlamış, paylaşıma dayalı bir oluşumdur. Tasarım, teknoloji, web, kültür ve sanat ana başlıkları altında bilgi paylaşımı ve benzer değerlere sahip katılımcıların birbirleriyle iletişime girmelerine imkan sağlar. "Az ama Öz" sloganından yola çıkarak, kaliteli ve nitelikli katılımı temel alır.

Saygın ve ciddi bir ortamda yardımlaşmak, haberleşmek, kendi bildiklerini diğer katılımcılarla paylaşmak isteyen, oluşumumuza düzenli katılımda bulunacağı inancını taşıyan konuklarımızı üye olmaya davet ediyoruz. [ » ]


Üye Girişi:

UslanmaM baktabul.com TEKplatform TEKplatform

En popüler ilk 100 etiket
Tag Cloud
acil adsl ajax almak arama araniyor ariyorum ariyoruz asp bilen bilgi bilgisayar blog calisma canon css dijital div domain dosya eleman film firefox flash font form forum fotograf freelance google gore grafik grafiker hakkinda hangi hata hatasi hosting html ilgili ilk image internet istanbul istiyorum java javascript karakter kayit kisisel kullanimi link logo mac mail menu muzik mysql nasil neden nedir online photoshop php problemi program programi reklam resim satilik sayfa script server ses sistemi site sitesi son soru sorun sorunsali sorunu sql swf tasarim tasarimci tasarimcisi tasarimi turk turkce veri video web windows wordpress xml yardim yazi yeni zoque
Zoque RSS Aboneliği
Son eklenen konuları e-posta ile haber verelim mi?