2012-06-13 3 views

답변

7

이것은 "슬러그"로 알려져 있습니다.이 단어는 인기가 있습니다. 어쨌든.

궁극적으로 당신이해야 할 일은 .htaccess 파일을 가지고 들어오는 모든 트래픽을 잡아 내고 서버 레벨에서 PHP를 사용하여 PHP에서 작동하도록 만들면 여전히? id = 123 논리가 그대로 유지되며, 하지만 클라이언트 측 '/ folder/FHJKD /'는 볼 수있는 결과가됩니다.

여기에 유사한 논리를 사용하는 .htaccess 파일의 예가 있습니다. (그 점에 대해서는 wordpress도 마찬가지입니다.) 이 수행 할 작업을

RewriteEngine On 
#strips the www out of the domain if there 
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ 

#applies logic that changes the domain from http://mydomain.com/post/my-article 
#to resemble http://mydomain.com/?id=post/my-article 
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?id=$1 [QSA,L] 

는 장치에 논리를 가지고이에서 'ID'것이 예에서 변수를되는 index.php domain.com/ 후 모든 것을 받아 변수로 전달입니다 가장 적합한 귀하의 사이트가 필요합니다.

예, 이것은 지금

<?php 
//the URL for the example here: http://mydomain.com/?id=post/my-article 
if($_GET['id']) 
{ 
    $myParams = explode('/', $_GET['id']); 
    echo '<pre>'; 
    print_r($myParams); 
    echo '</pre>'; 
} 
?> 

이의 논리가 훨씬 더 깊게 할 것이다 기본적인 수준에서 순수한 예이지만, 전반적으로 특히 내가 가정 데이터베이스, 당신 거 싶어 작업의 원인이

$ myParams가 PHP 또는 데이터베이스에 삽입 될 수있는 악의적 인 코드가 없는지 확인하십시오.

Array(
    [0] => post 
    [1] => my-article 
) 

가 작동하려면이

echo $myParams[0].'<br />'; 

최소한해야 할 것이다 또는 당신은이 원인처럼 할 수있는 :

print_r()를 통해 위의 $myParams의 출력은 것 대부분의 브라우저에서 최종본을 추가합니다./

<?php 
//the URL for the example here: http://mydomain.com/?id=post/my-article 
if($_GET['id']) 
{ 
    //breaks the variable apart, removes any empty array values and reorders the index 
    $myParams = array_values(array_filter(explode('/', $_GET['id']))); 
    if(count($myParams > 1) 
    { 
     $sql = "SELECT * FROM post_table WHERE slug = '".mysql_real_escape_string($myParams[1])."'"; 
     $result = mysql_query($sql); 
    } 

} 
?> 

이제이 예제는 매우 원시적 인 예제입니다. mysql 주입을 막기 위해 로직을 사용하고 싶다면 id = 123을 사용하여 기사를 끌어 올리는 것과 같은 쿼리를 적용하십시오.

다른 방법으로 완전히 다른 경로를 탐색하고 MVC (Model View Control)의 경이로움을 탐험 할 수도 있습니다. CodeIgniter와 같은 것은 시작하기에 좋은 간단한 MVC 프레임 워크입니다. 그러나 그것은 당신에게 달려 있습니다.

+0

이 작업을 수행하는 것은 매우 복잡해 보입니다. 나는 사용자가 데이터베이스에 추가 할 페이지에서 사용해야합니다.이 기술에 대한 실제 예제가 있습니까? -이 문제를 설명하는 유일한 방법은 아파치 서버 설정을 변경해야합니다. – user1121487

+0

네, 조금 복잡합니다. 그러나 당신이 원하는 것을 성취 할 수있는 유일한 방법. htaccess가 필요합니다. 그런 다음 모든 들어오는 요청은 index.php 뒤에 오는 모든 .com/뒤에 오는 $ _GET 매개 변수와 매우 유사한 변수로 처리됩니다. id = 123. 그것으로 당신은 기본적으로 동일한 논리가 데이터베이스에서 데이터를 가져 오는 것과 같은 방식으로 사이트를 구축합니다. 그 전에는 초기로드에서 조금씩 다르게 작동해야만합니다. – chris

+0

불행히도 주변에는 아무 것도 없습니다. 그 중 하나의 예가 모든 사람이 평상시에 다른 필요를 보인 것처럼 보입니다. 나의 예제에서는 ID를 가변 배열을 사용하여 폭발시키기 때문에'$ myParams [0]'이 점프 포인트가됩니다. 이제 대부분의 사람들은 최소한이 방법으로 데이터베이스 테이블에 추가 열을 추가하여 많이 변경하지 않고 쉽게이 개념에 대한 내용을 준수 할 수 있습니다. 이제이 한 칼럼은 귀하의 URL에 슬러그 .com/my-article 부분이 될 것입니다. 칼럼은 "내 기사"를 저장하고 다른 DB를 가져 오는 것처럼 작업 할 것입니다. – chris

3

이것은 mod_rewrite으로 얻을 수 있습니다. .htaccess 파일을 통해

+0

감사합니다. 지금 바로 살펴 보겠습니다. :) – user1121487

1

.htacess에서 RewriteEngine을 on으로 설정해야합니다.

그런 다음,이 작은 짐승의 일을하기 위해 몇 가지 정규식을 수행해야합니다. 가정합니다. id는 folder.php? id = 123입니다.

예컨대 폴더 편 :.?^RewriteRule의 폴더/([A-ZA-Z0-9 _-] +)/([0-9] +) HTML $ folder.php ID = $ 123