htaccess mod_rewrite

4 Cevap php

Ben gibi bir sayfaya gitmek zaman ben, bu konuda bir şeyler koymak için çalışıyorum:

http://www.example.com/character.php?id=3

Ben mod rewrite bunu değiştirmek istiyorsanız:

http://www.example.com/character/Jim_Carrey

Tabii, kimliği karakter adının satır Hangi ...

Örneğin bu tür için ... Ben onunla çalışmak için denedim, ama gerçekten .htaccess bir sürü çalıştı değil çünkü htaccess üretiminin en iyi görünmüyor.

4 Cevap

Bu aslında etrafında diğer yolu:

  1. Kendi web sitesinde, tüm bağlantılar bunları aramak istediğiniz şekilde yazmak. Örneğin http://www.site.com/character/Jim_Carrey

  2. In your database, you add a field, commonly called "slug" or "post_slug" which refers to the Jim_Carrey" part of the url. IT MUST BE A UNIQUE ELEMENT, much in the way of a primary key. So make sure you have a function that does take care of creating the slug based on a given string (the post title for example) and making sure there is no duplicate.

  3. Then in your .htaccess (on the root folder) you do something like

    RewriteEngine On
    RewriteRule ^character/([a-z0-9_\-]+)/$ character.php?slug=$1 [L,NC]
    
  4. Finally, in your character.php script, you do a database query not against the ID, but against the post_slug field.

Sadece karakterin adını kullanarak ediyorsanız, o zaman aşağıdaki gibi bir şey yapacağını

RewriteRule ^ karakteri / (. *) $ / Character.php? Slug = $ 1

örneğin bir URL ile http://www.example.com/character/Jim_Carrey. Daha sonra onu aramak için kimliği olmayacak gibi, geçirilen sülük kullanarak veritabanındaki karakterin adını aramak gerekir.

Eğer vis, ihtiyacınız varsa Alternatif URL ID içerebilir:

RewriteRule ^ karakteri / ([0-9] +) /. * $ / Character.php? Id = $ 1

Eğer http://www.example.com/character/3/Jim_Carrey gibi bir URL olabilir bu şekilde (SEO nedenlerle vs vs için) karakter adını içerir, ama aynı zamanda daha sonra doğrudan veritabanında bakmak olabilir kimliği olacaktır.

Sizin için Edit küçük bir PHP örneği ilk sensin:

<?php

  // ... database connection stuff here etc

  $slug = $_GET["slug"];

  // IMPORTANT: perform some data sanitization here
  // I'm just going to make sure it's only letters, numbers and
  // hyphens/underscores as an example.
  $slug = preg_replace("/[^a-zA-Z0-9\-_]+/", "", $slug);

  // Now look up in your database
  // Ideally you'd have a slug column to compare this with, that you can fill
  // when your record is created/updated

  // You'd also be best off using bound parameters here, rather than directly
  // adding the data into the query string.  I personally use the MDB2 PEAR
  // module but feel free to use whatever you normally use.
  $qry  = "SELECT * FROM characters WHERE slug='" . $slug . "'";
  $result = mysql_query($qry, $db);

  // do something based on this result, fail if none found
  // or show details if OK etc
  // ...
?>

Bu yardımcı olur umarım! Her zaman olduğu gibi, sorguları için bağlı parametreleri mümkün kullanmak ve iyi kullanıcı verilerinin sanitization gerçekleştirin. ARMUT MDB2 modülü bu nasıl güzel bir sayfası vardır here.

Edit 2 hızlı ve kirli bir kurulum :-)

. Htaccess dosyası aşağıdaki gibidir:

RewriteEngine On
RewriteRule ^ karakteri / (. *) $ / Character.php? Slug = $ 1
  • Sizin. Htaccess dosyası ideal sitenizin kök olacaktır. Örneğin / home / wayne / public_html / veya dizin dosyası arası servis edilir her yerde

  • Olacağını maç için bir URL http://www.example.com/character/Jim_Carrey - $ _GET ["sülük"] olarak $ _GET dizisinde görünen ibaresi "Jim_Carrey" ile. NB özür dilemek, şimdi onu güncelledik :-) yukarıdaki PHP uykulu dün gece bu yüzden hiç merak $ _POST onun bir GET isteği olarak çalışmak olmaz yazdı!

  • Sonunda ev sahibi. Htaccess dosyalarının kullanımını desteklediğinden emin olmak gerekir. Bu kurulum SO yüzden herhangi bir Apache yapılandırma soruları en iyi http://serverfault.com/ at üzerinde soran olurdu kapsamı dışında

Ben htaccess ile bu yapamam eminim. Sen url (? Id = 3) gelen bilgileri kullanarak ve daha sonra veritabanından öğrendiklerinizi kullanarak Header Function çağıran veritabanı sorgulama, PHP bunu yapmak gerekir.

Eğer mod_rewrite rewritemap kullanmak mümkün olabilir gibi geliyor.