2011-08-09 4 views
2

저는 mod_rewrite를 처음 접했지만 약간의 검색을 해본 결과이 질문에 대한 답을 찾을 수 없습니다. 쿼리 문자열에서 전달 된 ID에 따라 수십 페이지의 콘텐츠 페이지를 제공하는 PHP 페이지가 하나 뿐인 사이트가 있습니다. 이 ID 이 사라 지도록 URL을 다시 쓰고 싶습니다.이 사라지고 데이터베이스에서 가져온 페이지 제목으로 바뀝니다. 예를 들어URL을 재 작성하여 쿼리 문자열의 ID와 제목을 바꿉니다.

www.example.com/index.php?id=19 

은 "내 페이지 제목은"인덱스 데이터베이스에 저장된 페이지의 제목입니다

www.example.com/my-page-title 

로 대체 (19)

사람이 어떤 경험이 있습니까 이런 종류의 재 작성, 또는 심지어 가능합니까?

감사합니다,

HR은

답변

1

이 가능합니다. $ _GET 값을 보내도록 URL을 다시 쓰고이 값을 사용하여 원하는 행을 찾습니다. url은 고유해야하지만 elsely 고유 한 행을 찾을 수 없습니다.

예 :

이 당신에게 당신이 다음 데이터베이스에서 값을 찾는 데 사용할 수있는 PHP의 값 $_GET['slug']을 제공
RewriteRule ^([\d\w-]+)$ index.php?slug=$1 [L] 

.

+0

위의 답변과 비슷한 Robin에게 감사 드려요. – user885609

3

물론 그것의 가능한, PHP 스크립트에 대한 귀하의 .htaccess는 다음과 같이 보일 수 있습니다 : 이것은 "index.php에 URL = 더 - 직접 입력 한 디렉토리 나 파일 이름을 제외한 모든 URL을 다시 작성합니다

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

-주소". 그런 다음 $ _GET의 값을 사용할 수 있습니다 당신의 index.php에서

는 [ 'URL이'] ID를 확인하려면 다음

// init DB layer 
if (isset($_GET['url']) && !empty($_GET['url'])) { 
    $url = my_filter_function($_GET['url']); // filter input 
    $pdo = my_get_pdo_function(); // get configured PDO objected 
    $query = "SELECT id FROM my_router_table WHERE url = ? LIMIT 1"; // use prepared statements for security/performance reasons 

    $stmt = $pdo->prepare($query); 
    $stmt->bindValue(1, $url, PDO::PARAM_STR); // bind the value as a string 

    // ternary operator expanded for readability 
    if ($stmt->execute()) { 
    $id = $stmt->fetch(PDO::FETCH_ASSOC); 
    } else { 
    $id = -1; // 404 page 
    } 

    // fetch content/render page according to ID 
} 

이 분명 지나치게 단순화 된 예입니다 그리고 당신이 정말로 당신에게 있는지 제대로해야한다 귀하의 의견을 피하고 준비된 진술을 사용하여 보안 위험을 피하십시오. 또한 MySQLi 또는 다른 데이터베이스 액세스 레이어를 사용하는 경우 준비/실행/패치 코드가 약간 다를 수 있습니다.

+0

이것은 매우 도움이되는 Alex이다. 나는 그것을 가끔 줄 것이다. 많은 감사합니다. – user885609

관련 문제