2012-10-01 2 views
1

나는이 리다이렉션에 대해 새로운 것이므로 어떻게 작동하는지 알고 싶다. 나는의 index.php라는 일부 파일이 있고 난PHP .htacces 및 index.php 리다이렉션

index.php 

<?php 
    if(empty($dir)){ 
    include('includes/home.php'); 
    } 
    if($dir=='profile'){ 
    include('includes/profile.php'); 
    } 
    elseif($dir=='settings'){ 
    include('includes/settings.php'); 
    } 
    else{ 
    include('includes/404.php'); 
    } 
    ?> 

URL이 사이트에 어떤 디렉토리를 hadlle 할 :

test 1. www.example.com/ - will view the include home. 
test 2. www.example.com/settings - will view the include settings. 
test 3. www.example.com/errorsample - will view the include 404 page. 

방법 .htaccess을하고 그 코드를 사용을 index.php 또는 어떤 생각이 어떻게 작동하고 그것의 샘플 코드.

답변

2

간단한 예를 들어 설명해 보겠습니다. 그것이 무엇을하는 것은 그 루트 모든 URL 요청하고되는 index.php 요청을 보냅니다 다음 .htaccess 파일을

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^(.*)$ /index.php?x=$1 [L] 
#^This is the rule that does the redirection 

을 고려하십시오. 그것을 어떻게 보내는가? 나는 그것을 할 몇 가지 예를 보여줄 것입니다.

  • www.example.com/settingswww.example.com/index.php?x=settings
  • www.example.com/errorsample로 전송됩니다이 그래서 www.example.com/index.php?x=errorsample

로 전송됩니다, 지금 당신은 당신의 index.php를 구성하고 당신이 얻을 값으로, 당신이 원하는 것을 결정 $_GET['x']

switch($_GET['x']) { 
    case "profile": include("include/profile.php"); break; 
    // .... similarly other cases 
    default: include("includes/home.php"); break; 
} 

}

에서3210
+0

왜 작동하지 않습니까? .htacces # 1 워드 RewriteRule의 온 한다 RewriteEngine (^. *) $ /index.php?x=$1 [L] # END의 워드 의 index.php를 BEGIN

  

+0

Wordpress에는 이러한 유형의 탐색을위한 자체 '.htaccess' 파일이 있습니다. 내 규칙을 무시하는 다른 규칙이있을 것입니다. – Starx

0

이것은 실제로 리디렉션이 아닙니다. 당신이 묘사하고있는 것처럼 보일 수있는 것은 초보자 용 페이지 컨트롤러입니다. 이것은 웹 사이트 프레임 워크에 들어가서 다른 요청에 반응 할 수있는 단일 지점입니다.

가장 먼저해야 할 일은 사이트 폴더 구조를 생각하는 것입니다. 일반적으로 동일한 수준에 "공개"디렉토리와 "라이브러리"(또는 "포함") 디렉토리가 있습니다. 즉, 아파치 설정에서 DocumentRoot/var/www/yoursite/public으로 설정하면 사람들이 "include"디렉토리의 PHP 코드를 /var/www/yoursite/include에 갖기가 더 어려워집니다.

공용 디렉토리에는 .htaccess 및 index.php 파일이 들어 있습니다.

간단한 설정은 다음의 .htaccess이가하는 것입니다

RewriteEngine On 
RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA] 

이는 PHP $ _GET 배열의 값으로 웹 사이트로 전송되는 URL을 캡처하고 설정합니다. 여기서 QSA 옵션은 링크에 쿼리 문자열 (예 : http://www.example.com/module?parameter=value)이 있으면이 정보가 스크립트에도 전달됨을 의미합니다.

if/else 또는 긴 switch/case 블록의 긴 목록을 작성하는 것이 지루하고 (그리고 신속하게 유지 관리가 불가능할 수도 있습니다) 궁극적으로 URL과 파일의 일대일 대응은 ' 공용 디렉토리에서 파일을 사용할 수있게 남겨 두었을 때 도움이 될 것입니다. 물론 페이지 컨트롤러 (또는 전체 Model-View-Controller)를 사용하면 이러한 일대일 대응이 필요하지 않습니다. ID 또는 "친숙한"URL을 전달하여 사용할 수 있습니다 데이터베이스 (예 : 블로그 게시물 등)에서 저장된 정보를 추출합니다.

또한 URL을 include 함수로 매핑 할 때주의해야합니다. 누군가가 http://www.example.com/database.php을 요청하면 어떻게해야합니까? - 적절한 예방 조치를 취하지 않았다면 사이트와 서버를 망칠 수 있습니다.