İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Seo Link ve RewriteRule Problemi

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
Loi, şu anda 3 tane değişik alan ( kategori, sayfalar ve yazilar ) için yazılmış if sorguları dışında başka bir kodum yok. Gelen veriyi alıyorum explode yapıyorum ve sorguya yolluyorum.

Angelo, anladım fakat gelen yanlış veya kırık linkler route sayfasına yönleniyor ve ortaya sadece boş bir sayfa çıkıyor. Benim bunu yakalayabilmem lazım ki 404 veya index sayfasına yönlendirebileyim. Bu yüzden her gelen veri için ayrı bir sorgu ve karşılaştırma yazıyorum ve denemeler yapıyorum.

Ayrı şekilde yapılan sorgu ve karşılaştırmalarla çözüm bulduklarım :

- domain/kategori ve domain/kategori/ aynı şekilde algılanıyor.
- domain/kategori/seo-yazi.html şeklinde olan ve domain/kategori/seo-yazi5.html şeklinde yanlış yazılmış bir yazıyı kategori olarak algılamıyor ve hata sayfasına yonleniyor.
- Yukarıdaki gibi doğru bir yazi linkinin kategori bölümü değiştiğinde hata sayfasına yönleniyor.

Çözüm aradıklarım :

- Boş sayfaya yani route sayfasına yönlenenler için karşılaştırma ve sorgu yapmam gerekiyor.
- domain/kategori/ veya kategori şeklinde ki girişlerde o kategoriye ait verileri listeletmem lazım.

Sorunun cevabını zaten vermişsin. Diyorsun ki route sayfasına yönleiyor boş sayfa çıkıyor. Niye çıkıyor çünkü data yok.
if / else döngülerinin sonuna asagidakini eklemen kafi.


PHP:
if (!$sql[type])  { 404hatakodu verip 404hata-sayfasi-cagir; }

Olmayan sayfanın TYPE degeride boş dönecektir.
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
Route dosyasini yolla, tum url sekillerini yolla :)
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Loi keşke o kadar basit şekilde olsaydı.

Angelo route dosyasında aşağıdaki kod var sadece ve bu kadar basit bir kodun yanlış kısmı çalışmıyor. Gelen veriyi alıp bu sorguya gönderdim. Eğer veri varsa buluyor ve bulundu yazıyor fakat yanlış bir veri geldiyse hiçbirşey yazmıyor.

PHP:
$sorgu = mysql_query("SELECT * from sayfa WHERE s_baslik = '$gelen' ");

while ($veri = mysql_fetch_array($sorgu)) {

// if bölümüne  $gelen == $veri['s_baslik'] şeklinde direkt gelen veriyide yazdım sonuç aynı

if ( mysql_num_rows($sorgu) > 0)  
{
 echo "bulundu";
}
else 
{
echo "bulunamadi";
}

}
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
PHP:
$sorgu = mysql_query("SELECT * from sayfa WHERE s_baslik = '$gelen' ");

  if (mysql_num_rows($sorgu) == '1') {
  $veri = mysql_fetch_array($sorgu);

  /* burda veri tabaninda TYPE seklinde bir alan acip tanimlama yaparsin,
  benzer sayfalardan kurtulmak icin. */

    if ($veri['type'] == '1') {
    include('kategori.php');
    exit;
    }
   
    if ($veri['type'] == '2') {
    include('article.php');
    exit;
    }

     /* vb... */

  }
  else {
  /* veri yok, burada elle if - else sekli ek sayfan varsa db de tutulmayan
  onlari girersin ve en sonunda da hicbiseyi yakalamayanlar icin 301 / 404 yaparsın */
  
  header("Location: http://www.abidik.com");
  exit;
  }
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Angelo bu dediklerini çoktan yaptım zaten. Yukarıda verdiğim sorgunun yanlış kısmı çalışmıyor + senin verdiğin koduda denedim yanlış kısmı çalışmıyor. İkiside benzer şekilde sorgulama yapıyor zaten
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
var_dump(mysql_num_rows($sorgu))
yap bakalım çalışmayan senaryoda. belki query yanlış. Yada 1 den fazla kayıt var match eden. 0'dan büyük tam doğru bir kullanım değil.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
sorgu satırından sonra ekledim ve diğer satırları kapattım. int(1) diye bir sonuç verdi
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
demek ki buluyor.
var_dump(mysql_fetch_Array($sorgu))
yaparak ne bulduguna bak bakalim bi:)
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Veritabanında olan bir sayfaya girilince :

array(6) { [0]=> string(1) "1" ["s_id"]=> string(1) "1" [1]=> string(10) "dokumanlar" ["s_baslik"]=> string(10) "dokumanlar" [2]=> string(1) "1" ["s_type"]=> string(1) "1" }

Veritabanında olmayan bir sayfaya girilince :

bool(false)
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
E tamam, false oldugu durumda zaten else'e düşmesi lazım.
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
En son yazdigim yerdesin hala olmasi gereken oluyor Osman.

Angelo durumu cok net izah etmis.
En son satirda ki ELSE veritabanında senin istedigin degerlerin hicbiri bulunmuyorsa abidik sayfasina git diyor. Sen bunun yerine
PHP:
header("HTTP/1.0 404 Not Found");
dersin olur biter.
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Verdiğin header yönlendirmesinide koydum ama değişen birşey yok + belki mysql ve apache de sorun oluşmuştur diye restart yaptım servisleri ondada değil

Biraz bekleticem Loi serverdan bir port açayım ve yönlendirme yapayım öncelikle
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
$x = mysql_num_rows($sorgu);

if (!$x OR $x==0) {
/* 404 */
}
else {
/* match */
}


boyle dene.
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
yada ensondaki esle satırının yerine
if ($veri[type] == "") { hatasaygasinagit: }
yazsin kurtulsun ya :)
 

OsmanAtabey

0
İyinet Üyesi
Katılım
26 Mart 2005
Mesajlar
922
Reaction score
4
Yok maalesef onlarda olmuyor doğru kısım çalışıyor ama yanlış kısım cevap vermiyor bir türlü
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
ya zipleyip verirmisin bende deli olcam simdi nasil olmaz
bakayım şuna bi, ezelde başladı ama :)
 

Angelo

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
$x = mysql_num_rows($sorgu);

if (!$x OR $x < 1) {
echo 'bulmadim';
}
else {
echo 'buldum';
}

sunun ciktisini versene :)
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst