2011-08-05 32 views
1

私は、ユーザーがブログを書いたり質問したりできるソーシャルネットワークを持っています。私はPHPを介してURLの最後にブログや質問のタイトルを投稿する動的なURLを作成したいと思っています。動的URLを作成するにはどうすればよいですか?

例:これを実現するためのクリーン最も効率的な方法を探してい

www.blah.com/the_title_here 

答えて

6

を作成するタイトル

"How do I create dynamic URLs?"

からのみ$id

を使用データベース行に「g」を追加し、そのスラッグと一致する投稿を見つけるPHPスクリプトを作成します。例えば

、あなたがslugというパラメータを取っindex.phpというスクリプトを持っている場合...

<?php 
if (isset($_GET['slug'])) { 
    $sql = "SELECT * FROM `your_table` WHERE slug = ? LIMIT 1"; 
    $smt = $pdo->prepare($sql); 
    $smt->execute(array($_GET['slug'])); 
    $row = $smt->fetchObject(); 
    // do something with the matching record here... 
} 
else { 
    // display home page 
} 

...あなたの.htaccessを使用してできた後、再書き込み要求:

RewriteEngine on 
RewriteRule ^(.+)$ index.php?slug=$1 
0
"www.blah.com/$id/".preg_replace('/^[a-z-]+/','',preg_replace('/[ ,;.]+/','-',strtolower($title))) 

、それはあなたが通常URLに優しい「SLUを保存するURL

www.blah.com/15/how-do-i-create-dynamic-urls

+0

非常に抽象的ですね。これは正確に何ですか? –

+0

タイトルから「動的URLを作成するにはどうすればよいですか? URLを作成します:www.blah.com/15/how-do-i-create-dynamic-urls –

1

これを行うオープンソースのソフトウェアがたくさんあります。あなたはこれを行うためにWordPress.orgやMediaWiki.orgを見ることができます。 mod_rewriteルールを追加するには、.htaccessまたはApacheの設定の組み合わせが必要です。

次に、あなたが持っている場合はそうでなければ、SQLインジェクションやXSSに対して脆弱であることができ、マーティン・ビーンはポストをルックアップするために書いたように、コントローラファイルをしたい...しかし、あなたは脱出/サニタイズ/正しく入力を検証することを確認しますあなたのサイトのJavaScript。

したがって、idメソッドを使用し、pretty-url目的でのみslugを使用する方が良いです。 WordPress.orgソフトウェアはまた、あなたが多くの投稿をしたら、スラッグだけに行くことはそれを遅くすることを示唆しています。だから、あなたが一致する正規表現をwww.blah.com/slug-phrase-goes-before-the-numeric_idの組み合わせを使用して書くことができますでしょう.*(\d+)$

2

これを行うには、データベースを使用し悲しい :( データベースを検索する必要はありません。多くのケースがあるかもしれませんし、あなたはこの方法で意志例えば: - 。。。マーティンが示すあなたのパスやスラッグを取得するようwww.blah.com/signup(ない点ここでは)とDB接続は資源、深刻なリソースを食べていない...

RewriteEngine on 
RewriteRule ^(.+)$ index.php?slug=$1 

ほとんどのフレームワークはファイルシステムを使用しますよりクリーンなURLを実現します。

<?php 
$default = "home"; 
//function to make sure the slug is clean i.e. doesnot contain ../ or something 
if(isset($_GET['slug'])) $slug = clean($_GET['slug']); 
if(!isset($slug)) $slug = $default; 
$files = explode('/',$slug);// or any other function according to your choice 
$file = "./commands/".$files[0].".php"; 
if(file_exists($file)) 
    require_once($file); 
else 
    require_once("./commands/".$default.".php"); 

に理論的には似ているすべてのファイルを保持するために、 一つのフォルダと 何かがあなたが望むように複雑に、これは簡単なように作ることができます。それはそれをやっての

利点このよう

  1. ...あなたも、マーティンが何をしたかのようなデフォルトのケースを決定するためにデータベースを使用することができますが、それは$defaultはなく、あなたが最初に使用するロジックにする必要がありますデータベースを照会するよりも速いです。
  2. これは多く調整できます。垂直例えば:site.com/users/piyushmishrasite.com/forums/mykickassforumあるいはsite.com/category/category-name/post-name/comments/page-3
  3. などのより深いレベルであなたが水平easier.Scalingセットアップライブラリとパッケージ(チェックするために複数のディレクトリを追加し、各ディレクトリは、1 /複数のモジュールの設定を持つことができます)例えば次のことができます。./ACLcommands/users.php./XMLRPC/ping.php
関連する問題