2011-08-05 8 views
1

나는 사용자가 블로그를 작성하고 질문 할 수있는 소셜 네트워크를 가지고 있습니다. PHP를 통해 URL 끝에 블로그 나 질문의 ​​제목을 게시하는 동적 URL을 만들고 싶습니다.동적 URL은 어떻게 만듭니 까?

예 :

www.blah.com/the_title_here 

가장 깨끗한 가장 효율적인 방법을 찾고이 작업을 수행합니다.

답변

6

URL을 생성 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))) 

및 사용은 제목에서 $id

"How do I create dynamic URLs?"

그것은 당신이 일반적으로 URL 친화적 인 "SLU를 저장하는 것

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 구성 설정의 조합이 필요합니다.

다음으로 Martin Bean이 게시물을 찾으려고 쓴 것처럼 컨트롤러 파일을 원하지만 탈출/위생/입력의 유효성을 올바르게 확인하십시오. 그렇지 않으면 SQL 인젝션이나 XSS에 취약 할 수 있습니다. 귀하의 사이트에 자바 스크립트가 있습니다.

그래서 id 메소드를 사용하고 예쁜 URL 용도로만 슬러그를 사용하는 것이 좋습니다. 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 아니라 사용하는 제 1 논리에 있어야합니다 데이타베이스를 조회하는 것보다 더 빠름

  2. 이것을 많이 확장 할 수 있습니다. 수직 예 : site.com/users/piyushmishrasite.com/forums/mykickassforum 또는에 깊은 site.com/category/category-name/post-name/comments/page-3
  3. 같은 수준 당신은 설정 라이브러리 및 수평 easier.Scaling 패키지 (확인 이상의 디렉토리를 추가하고 각 디렉토리가 하나/더 모듈 설정을 할 수 있습니다) 할 수 있습니다 예 : ./ACLcommands/users.php, ./XMLRPC/ping.php
관련 문제