• 24-08-2010, 16:03:56
    #1
    Merhaba, forumda yönlendirme ile ilgili bir sürü konu var. Araştırdım ama tam istediğim gibi bir cevap bulamadım.

    Yapmak istediğim ; http://www.site.com/kullaniciadi şeklinde url oluşturmak.

    Buraya kadar herşey normal, zaten bu sitede yığınla örnek var. Ancak sitemde başka yönlendirmeler de var.

    Örnek ;

    RewriteRule ^urun/(.*)$ index.php?islem=detay&id=$1 [NC]
    RewriteRule ^siparislerim$ index.php?islem=siparis [NC]
    RewriteRule ^giris$ index.php?islem=giris [NC]
    Kullanıcı isminin oluşacağı bir yönlendirme yapmak istiyorum.

    RewriteRule ^(.*)$ index.php?islem=kullanici&id=$1 [NC]

    Sistem öncelikle diğer yönlendirmeleri okusun diye yukarıdaki kodu dosyanın en altına koyduğumda diğer tüm yönlendirmeler bozuluyor. (.*) "herhangi birşey" demek olduğunu biliyorum. ( ya da yanlış biliyorum )

    Bu sorunun altından nasıl kalkabilirim acaba ?

    Şimdiden herkese teşekkürler...
  • 25-08-2010, 16:02:33
    #2
    Kimsenin bir fikri yok mu arkadaşlar ?
  • 25-08-2010, 19:14:26
    #3
    Şu şekilde yapabilirsin;
    .htaccess dosyana sadece aşağıdakileri yaz;
    RewriteEngine On
    RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?islem=$1
    Diyelim ki senin üye adı dışında 4 tane parametren var; siparis, giris, cikis, profil.
    Dosyandan anlaşıldığı üzere bunları include ediyorsun ya da get'ten geleni kontrol edip ona göre çalıştırıyorsun.
    Şöyle düzenleyeceksin;

    <?
    $islem = $_GET['islem']; // buraya güvenlik amaçlı slaşları silen bir fonksyion vs. koyabilirsin.
    $sayfalar = array('giris', 'cikis', 'profil', 'siparisler');
    
    if(in_array($islem, $sayfalar)) {
    	// buraya şu anda kullandığın üye sayfası haricindeki tüm kodlar gelecek
    } else {
    	// buraya üye sayfasında olmak istediklerini $islem değişlenini kullanarak koyacaksın
    }
    ?>
  • 26-08-2010, 10:37:10
    #4
    Öncelikle, cevabın için teşekkür ederim.

    Ancak .htaccess te sadece örnekteki 3 tane yönlendirme yok. Mesela şuna benzer yönlendirme de var ;

    RewriteRule ^kategori-(.*)-(.*)-(.*)$ index.php?islem=kategori&id=$1&sira=$3 [NC]
    Dolayısıyla htaccess e yazmamı önerdiğin yönlendirmenin çalışacağını sanmıyorum. Sadece ?islem=xx tarzı değil yani url ler...

    (.*) karakterinin başına - falan koyduğumda düzeliyor ama bu sefer de

    www.site.com/-kullaniciadi şeklinde oluyor. Bunu da ben istemiyorum işte...


    RewriteRule ^-(.*)$ index.php?islem=kullanici&id=$1 [NC]
  • 07-09-2010, 16:50:43
    #5
    Sorunuma kısmen çözüm bulabildim. Aşağıdaki kalın yazılı eklemeleri yaptım önce.

    RewriteRule ^urun/(.*)$ index.php?islem=detay&id=$1 [NC,L]
    RewriteRule ^siparislerim$ index.php?islem=siparis [NC,L]
    RewriteRule ^giris$ index.php?islem=giris [NC,L]


    Kullanıcı isimlerinin yazılacağı yerde şöyle ;

    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC]

    Yani site.com/kullaniciadi şeklinde çalışıyor. Regex desenleri hakkında pek bilgim yok. Sorun şu ki,

    site.com/kullaniciadi/baskabirsayfa-3
    bağlantısını okutamadım.


    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC]
    şurada bir değişiklik yapılmalı sanırım ama tam olarak ne değişmeli bilmiyorum.



    Yardım edilmesi dileğiyle...
  • 07-09-2010, 17:35:18
    #6
    Üyeliği durduruldu
    [NC] leri [NC,L] yaparsanız ilk uyan kuraldan sonrasını çalıştırmaz

    NC => No Case : yazdığınız regular expression için büyük-küçük harf duyarlılığını kaldırır

    L => Last : uyarsa eğer çalışan son kural olur.
  • 07-09-2010, 19:02:26
    #7
    Teşekkür ediyorum bilgi için ama benim şuanki sorunum deseni nasıl yapacağımı bilmiyor olmam... Mesela site.com/kullaniciadi sayfasında kullanıcının liste şeklinde kendi makaleleri var. Makale listesinin ikinci sayfası olduğunu düşünelim. site.com/kullaniciadi/sayfa2 gibi...

    İşte bunu nasıl yaparım...


    RewriteRule ^([^/]+)???? index.php?islem=kullanici&id=$1&sayfa=$2 [NC] -- Bu sayfalama deseni
    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC] -- Bu da kullanicinin ana sayfası deseni


    ???? alanına nasıl bir desen yapmalıyım ki diğer desenleri de bozmasın...


    Umarım anlatabilmişimdir
  • 08-09-2010, 13:35:16
    #8
    Üyeliği durduruldu
    eagle_one adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ediyorum bilgi için ama benim şuanki sorunum deseni nasıl yapacağımı bilmiyor olmam... Mesela site.com/kullaniciadi sayfasında kullanıcının liste şeklinde kendi makaleleri var. Makale listesinin ikinci sayfası olduğunu düşünelim. site.com/kullaniciadi/sayfa2 gibi...

    İşte bunu nasıl yaparım...


    RewriteRule ^([^/]+)???? index.php?islem=kullanici&id=$1&sayfa=$2 [NC] -- Bu sayfalama deseni
    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC] -- Bu da kullanicinin ana sayfası deseni


    ???? alanına nasıl bir desen yapmalıyım ki diğer desenleri de bozmasın...


    Umarım anlatabilmişimdir
    dediğinizi anladım, fakat bu iki urli birbirinden ayıran birşey olmalı.. mesela birine -s([0-9]+) ekleyin bu sayfa=$2 yerine geçsin.. diğerinde boyle bişey olmasın..

    ÖRNEK
    RewriteRule ^([^/]+)-s([0-9]+) index.php?islem=kullanici&id=$1&sayfa=$2 [NC,L] //-- Bu sayfalama deseni
    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC,L]  //-- Bu da kullanicinin ana sayfası deseni
    ikincisi için link /5 iken diğeri için /5-s1 gibi olur
  • 08-09-2010, 14:50:11
    #9
    Cevap için teşekkür ediyorum. Yukarıda verdiğim /sayfa1 tipi örnekten başka bir kaç sayfa daha vardı. Aynı formata benzeyen... Mesela kullanıcının profili için site.com/kullaniciadi/profil gibi...


    Ve yukarıda "deseni nasıl yapacağımı bilmiyorum" dediğim desen üstünde de şu kodlar vardı .htaccess dosyasında; bu kısmı yazmamışım. Yazsam belki daha hızlı çözüm bulabilirdim

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^([^/]+) index.php?islem=kullanici&id=$1 [NC]

    Her formata uygun desen üretirken

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    kısımı kopyaladım ve hemen altına da desenimi yazıp çözüm elde etmiş oldum. Önerin ve örneğin için sağol, işe yaradı