복붙노트

PHP에서 리디렉션을 만드는 방법은 무엇입니까?

PHP

PHP에서 리디렉션을 만드는 방법은 무엇입니까?

PHP를 사용하여 사용자를 다른 페이지로 리디렉션 할 수 있습니까?

사용자가 www.example.com/page.php에 가서 www.example.com/index.php로 리디렉션한다고 가정하면 메타 새로 고침을 사용하지 않고 어떻게 그렇게 할 수 있습니까? 가능한?

이렇게하면 승인되지 않은 사용자로부터 내 페이지를 보호 할 수도 있습니다.

해결법

  1. ==============================

    1.

    기존 답변과 내 자신의 2 센트 요약 :

    header () 함수를 사용하여 새 HTTP 헤더를 보낼 수 있지만 HTML 또는 텍스트보다 먼저 브라우저로 보내야합니다 (예 : 선언 전에).

    header('Location: '.$newURL);
    

    die () 또는 exit ()

    header("Location: http://example.com/myOtherPage.php");
    die();
    

    die () 또는 exit ()를 사용해야하는 이유 : Daily WTF

    절대 또는 상대 URL

    2014 년 6 월 이후 절대 URL과 상대 URL을 모두 사용할 수 있습니다. 절대 URL 만 허용 된 이전 RFC 2616을 대체 한 RFC 7231을 참조하십시오.

    상태 코드

    PHP의 "위치"- 헤더는 여전히 HTTP 302 리디렉션 코드를 사용하지만 이것은 사용해야하는 것이 아닙니다. 301 (영구 리디렉션) 또는 303 (기타) 중 하나를 고려해야합니다.

    참고 : W3C는 303 헤더가 "HTTP / 1.1 이전의 많은 사용자 에이전트"와 호환되지 않는다고 언급하며, 현재 사용되는 브라우저는 모두 HTTP / 1.1 사용자 에이전트이며, 거미와 로봇과 같은 다른 많은 사용자 에이전트에는 해당되지 않습니다.

    PHP의 HTTP 헤더와 header () 함수

    http_redirect ($ url)의 대체 방법을 사용할 수 있습니다. PECL 패키지를 설치해야합니다.

    이 함수는 303 상태 코드를 포함하지 않습니다.

    function Redirect($url, $permanent = false)
    {
        header('Location: ' . $url, true, $permanent ? 301 : 302);
    
        exit();
    }
    
    Redirect('http://example.com/', false);
    

    이것은보다 유연합니다 :

    function redirect($url, $statusCode = 303)
    {
       header('Location: ' . $url, true, $statusCode);
       die();
    }
    

    앞서 언급했듯이 리디렉션은 아무 것도 쓰여지기 전에 작동합니다. 일반적으로 HTML 출력에서 ​​호출되면 실패합니다. 그렇다면 다음과 같이 HTML 헤더 해결 방법을 사용할 수 있습니다 (별로 전문적이지는 않습니다).

     <meta http-equiv="refresh" content="0;url=finalpage.html">
    

    또는 자바 스크립트 리디렉션도 가능합니다.

    window.location.replace("http://example.com/");
    
  2. ==============================

    2.

    function Redirect($url, $permanent = false)
    {
        if (headers_sent() === false)
        {
            header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
        }
    
        exit();
    }
    
    Redirect('http://www.google.com/', false);
    

    죽는 것을 잊지 마라 () / exit ()!

  3. ==============================

    3.

    echo를 사용하여 PHP에서 JavaScript를 출력하면 작업을 수행 할 수 있습니다.

    echo '<script type="text/javascript">
               window.location = "http://www.google.com/"
          </script>';
    

    페이지 출력을 버퍼링하고 나중에 리디렉션 조건을 확인하지 않으면 PHP에서 실제로이 작업을 수행 할 수 없습니다. 너무 많은 번거 로움 일 수 있습니다. 헤더는 페이지에서 보낸 첫 번째 것임을 기억하십시오. 대부분의 리디렉션은 대개 페이지의 뒷부분에서 필요합니다. 이를 위해 페이지의 모든 출력을 버퍼링하고 나중에 리디렉션 조건을 확인해야합니다. 이 시점에서 페이지 사용자 헤더 ()를 리디렉션하거나 단순히 버퍼 된 출력을 반향시킬 수 있습니다.

    버퍼링 (장점)

    출력 버퍼링이란 무엇입니까?

  4. ==============================

    4.

    header () 함수를 사용하여 HTTP 위치 헤더를 보냅니다.

    header('Location: '.$newURL);
    

    어떤 생각과는 달리, die ()는 리디렉션과는 아무런 관련이 없습니다. 정상적인 실행 대신 리디렉션하려는 경우에만 사용하십시오.

    example.php :

    <?php 
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt','a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
    fclose($fh);
    ?>
    

    결과 또는 3 건의 실행 :

    bart@hal9k:~> cat /tmp/track.txt
    127.0.0.1 2009-04-21T09:50:02+02:00
    127.0.0.1 2009-04-21T09:50:05+02:00
    127.0.0.1 2009-04-21T09:50:08+02:00
    

    Resuming - 의무적 인 die () / exit ()는 실제 PHP와는 아무런 관련이없는 도시의 전설입니다. 위치 : 헤더를 "존중하는"클라이언트와 아무런 관련이 없습니다. 헤더를 보내는 것은 사용 된 클라이언트에 관계없이 PHP 실행을 중지하지 않습니다.

  5. ==============================

    5.

    <?php 
         header('Location: target-page.php');
         exit();
    ?>
    

    하지만 헤더 함수를 사용하면 몇 번 "경고 메시지가 나타납니다  헤더를 보내기 전에 echo 나 print를하지 말고 단순히 헤더 함수 뒤에 die () 나 exit ()를 사용할 수 있습니다.

    <?php 
        echo "<script>location.href='target-page.php';</script>";
    ?>
    

    여기 당신이 어떤 문제에 직면하지 않습니다.

    <?php
    ob_start(); //this should be first line of your page
    header('Location: target-page.php');
    ob_end_flush(); //this should be last line of your page
    ?>
    
  6. ==============================

    6.

    이러한 답변의 대부분은 매우 중요한 단계를 잊고 있습니다!

    header("Location: myOtherPage.php");
    die();
    

    중요한 두 번째 라인을 나가면 데일리 WTF가 끝날 수 있습니다. 문제는 브라우저가 페이지가 반환하는 헤더를 존중할 필요가 없기 때문에 헤더가 무시되면 나머지 페이지는 리디렉션없이 실행된다는 것입니다.

  7. ==============================

    7.

    <?php header('Location: another-php-file.php'); exit(); ?>
    

    또는 이미 PHP 태그를 연 경우 다음을 사용하십시오.

    header('Location: another-php-file.php'); exit();
    

    외부 페이지로 리디렉션 할 수도 있습니다 (예 :

    header('Location: https://www.google.com'); exit();
    

    exit ()를 포함 시키거나 die ()를 포함 시키십시오.

  8. ==============================

    8.

    이러한 답변 중 대부분은 정확하지만 절대 URL이 있다고 가정합니다. 상대 URL을 사용하고 나머지를 생성하려면 다음과 같이하면됩니다.

    $url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
    $url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
    $url .= '/your-relative/path-goes/here/';            // <-- Your relative path
    header('Location: ' . $url, true, 302);              // Use either 301 or 302
    
  9. ==============================

    9.

    세션 변수를 사용하여 페이지에 대한 액세스를 제어하고 유효한 사용자를 인증 할 수 있습니다.

    <?php
    
    session_start();
    
    if ( !isset( $_SESSION["valid_user"]) )
    {
        header("location:../");
       die();
    }
    
    // Page goes here
    ?>
    

    http://php.net/manual/en/reserved.variables.session.php.

    최근에 사이버 공격이 발생하여 관리자 패널 또는 웹 응용 프로그램의 예약 된 부분에 액세스하려는 사용자를 알아야했습니다.

    그래서 데이터베이스에 신경을 쓰고 싶지 않기 때문에 로그 액세스 IP와 사용자 세션을 텍스트 파일에 추가했습니다.

  10. ==============================

    10.

    나는 이미이 질문에 대답했지만 다시 한 번해볼 것이다. CLI에서 실행중인 경우 (리디렉션이 일어나지 않아 종료되지 않아야 함) 또는 웹 서버가 PHP를 (F) CGI로 실행 중입니다 (올바르게 리디렉션하려면 이전에 설정된 상태 헤더가 필요합니다).

    function Redirect($url, $code = 302)
    {
        if (strncmp('cli', PHP_SAPI, 3) !== 0)
        {
            if (headers_sent() !== true)
            {
                if (strlen(session_id()) > 0) // if using sessions
                {
                    session_regenerate_id(true); // avoids session fixation attacks
                    session_write_close(); // avoids having sessions lock other requests
                }
    
                if (strncmp('cgi', PHP_SAPI, 3) === 0)
                {
                    header(sprintf('Status: %03u', $code), true, $code);
                }
    
                header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
            }
    
            exit();
        }
    }
    

    또한 이전 HTTP 응답의 설명에서 설명한 바와 같이 다양한 HTTP 리디렉션 코드 (301, 302, 303 및 307)를 지원하는 문제를 처리했습니다. 여기에 대한 설명이 있습니다.

  11. ==============================

    11.

    헤더 ( '위치 : http://www.yoursite.com/new_page.html');

  12. ==============================

    12.

    header("Location: /index.php");
    exit(0);   
    
  13. ==============================

    13.

    당신은 아래의 몇 가지 자바 스크립트 메소드를 사용할 수 있습니다.

     1)self.location="http://www.example.com/index.php";
    
     2)window.location.href="http://www.example.com/index.php";
    
     3)document.location.href = 'http://www.example.com/index.php';  
    
     4)window.location.replace("http://www.example.com/index.php");
    
  14. ==============================

    14.

    <?php 
    header('Location: redirectpage.php');
    header('Location: redirectpage.php');exit();
    echo "<script>location.href='redirectpage.php';</script>";
    ?>
    

    이것은 일반적이고 일반적인 PHP 리디렉션이지만 몇 초의 코드 대기 시간이있는 페이지를 리디렉션 할 수 있습니다.

    <?php
    header('refresh:5;url=redirectpage.php '); //Note: here 5 means 5 seconds wait for redirect.
    ?>
    
  15. ==============================

    15.

    예, header () 함수를 사용할 수 있습니다.

    header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
    exit();
    

    또한 header () 함수 바로 다음에 exit () 함수를 호출하여 코드 실행을 피하는 것이 좋습니다.

    문서에 따르면 실제 출력을 보내기 전에 header ()를 호출해야합니다.

  16. ==============================

    16.

    여기에 다른 사람들이 말했듯이, 위치 헤더를 보내면 :

    header( "Location: http://www.mywebsite.com/otherpage.php" );
    

    브라우저에 다른 출력을 보내기 전에 먼저해야합니다.

    또한 언급 한 것처럼 특정 페이지에서 인증되지 않은 사용자를 차단하기 위해이 방법을 사용하려는 경우 일부 사용자 에이전트는이를 무시하고 현재 페이지에서 계속 진행하므로 죽어야합니다 ( ) 보내십시오.

  17. ==============================

    17.

    시맨틱 웹이 등장하기 직전에 정확성을 고려해야합니다. 불행하게도, PHP의 "Location"헤더는 여전히 HTTP 302 리디렉션 코드를 사용합니다. 엄격하게 리디렉션을위한 최선의 방법은 아닙니다. 대신 사용해야하는 것은 303입니다.

    W3C는 303 헤더가 "많은 HTTP / 1.1 이전 사용자 에이전트"와 호환되지 않는다는 것을 언급하기에 충분합니다. 현재 사용중인 브라우저가 없습니다. 따라서 302는 유물이 아니어야합니다.

    ... 아니면 다른 사람들처럼 무시할 수 있습니다.

  18. ==============================

    18.

    아마도이 질문에 너무 늦은 것 같습니다. 그럼에도 불구하고 여기에 내 생각이있다.

    IMHO, 수신 요청을 리디렉션하는 가장 좋은 방법은 위치 헤더를 사용하는 것입니다.

    <?php
    header("Location: /index.php");
    ?>
    

    이 명령문이 실행되고 출력이 보내지면 브라우저가 사용자의 방향을 재 지정하기 시작합니다. 그러나 헤더를 보내기 전에 출력 (echo / var_dump)이 없었는지 확인하십시오. 그렇지 않으면 오류가 발생합니다.

    이것은 원래 묻는 것을 달성하는 빠르고 더러운 방법이지만, 결국이 종류의 리디렉션이 항상 301/302 리다이렉트로 해석되므로 SEO 재앙으로 판명 될 것이므로 검색 엔진은 방문 페이지 / 메인 페이지가 아닌 리디렉션 페이지로 항상 색인 페이지를 볼 수 있습니다. 따라서 그것은 웹 사이트의 SEO 설정에 영향을 미칩니다.

  19. ==============================

    19.

    PHP로 리디렉션하는 가장 좋은 방법은 다음 코드입니다 ...

     header("Location: /index.php");
    

    이후에 작동 할 코드가 없는지 확인하십시오.

    header("Location: /index.php");
    

    모든 코드는 위 행 앞에 실행해야합니다.

    가정하자.

    사례 1 :

    echo "I am a web developer";
    header("Location: /index.php");
    

    위치 (index.php)로 제대로 리디렉션됩니다.

    사례 2 :

    return $something;
    header("Location: /index.php");
    

    위의 코드는 위치 (index.php)로 리디렉션되지 않습니다.

    잘하면, 그것은 분명하다.

  20. ==============================

    20.

    네, PHP를 사용할 수 있습니다, 우리는 다른 페이지로 리다이렉트 할 것입니다 :

    <?php
    header("location:./");//redirect to index file
    header("location:index.php");//redirect to index file
    header("location:example.php");
    ?>
    
  21. ==============================

    21.

    방문자를 다른 페이지로 리디렉션하려면 (특히 조건부 루프에서 유용함) 다음 코드를 사용하면됩니다.

    <?php 
    header('Location: mypage.php'); 
    ?>
    

    이 경우 mypage.php는 방문자를 리디렉션하려는 페이지의 주소입니다. 이 주소는 절대적 일 수 있으며이 형식의 매개 변수를 포함 할 수도 있습니다 : mypage.php? param1 = val1¶m2 = val2)

    상대 경로 / 절대 경로

    상대 경로 나 절대 경로를 처리 할 때는 서버의 루트 (DOCUMENT_ROOT)에서 절대 경로를 선택하는 것이 이상적입니다. 다음 형식을 사용하십시오.

    <?php 
    header('Location: /directory/mypage.php'); 
    ?>
    

    대상 페이지가 다른 서버에있는 경우 전체 URL을 포함하십시오.

    <?php 
    header('Location: http://www.ccm.net/forum/'); 
    ?> 
    

    HTTP 헤더

    HTTP 프로토콜에 따르면 모든 유형의 콘텐츠보다 먼저 HTTP 헤더를 보내야합니다. 즉, 아무 문자도 헤더 앞에 전송되지 않아야합니다. 즉 빈 공간이 아닙니다!

    임시 / 영구 리디렉션

    기본적으로 위에서 제시 한 리디렉션 유형은 임시 리디렉션 유형입니다. 즉, Google과 같은 검색 엔진은 색인 생성시 리디렉션을 고려하지 않습니다.

    페이지가 다른 위치로 영구적으로 이동되었다는 것을 검색 엔진에 알리려면 다음 코드를 사용하십시오.

    <? 
    header('Status: 301 Moved Permanently', false, 301); 
    header('Location: new_address'); 
    ?>
    

    예를 들어이 페이지에는 다음 코드가 있습니다.

    <? 
    header('Status: 301 Moved Permanently', false, 301); 
    header('Location: /pc/imprimante.php3'); 
    exit(); 
    ?>
    

    위의 링크를 클릭하면 자동으로이 페이지로 리디렉션됩니다. 또한 영구적 인 리다이렉션 (Status : 301 Moved Permanently)입니다. 따라서 Google에 첫 번째 URL을 입력하면 자동으로 두 번째 리디렉션 된 링크로 리디렉션됩니다.

    PHP 코드의 해석

    방문자가 리디렉션에 지정된 주소로 이동하더라도 header () 다음에 오는 PHP 코드는 서버에 의해 해석됩니다. 대부분의 경우 이는 서버의로드를 줄이기 위해 exit () 함수의 header () 함수를 따르는 메소드가 필요하다는 것을 의미합니다.

    <? 
    header('Status: 301 Moved Permanently', false, 301); 
    header('Location: address'); 
    exit(); 
    ?>
    
  22. ==============================

    22.

    우리는 두 가지 방법으로 할 수 있습니다.

    아래의 PHP 코드에 의해

    위의 코드는 https://bskud.com/PINCODE/BIHAR/index.php에 저장하십시오.

    2. 어떤 조건이라도 사실이면 다른 페이지로 리디렉션합니다.

    <?php  $myVar = "bskud";   if ($myVar == "bskud") { ?>  <script> window.location.href="https://bskud.com";  </script> <?php  } else {  echo "<b>Check Website Name Again</b>"; } ?>
    

    `

  23. ==============================

    23.

    PHP 헤더에서 헤더를 업데이트 할 수 있습니다.

  24. ==============================

    24.

    php header 함수를 사용하여 리디렉션을 시도 할 수 있습니다. 브라우저가 화면으로 방향 재 지정 경고를 보내지 않도록 출력 버퍼를 설정하는 것이 좋습니다.

    ob_start();
    header("Location: ".$website);
    ob_end_flush();
    
  25. ==============================

    25.

    Apache에서 실행중인 경우 .htaccess를 리디렉션에 사용할 수도 있습니다.

    Redirect 301 / http://new-site.com/
    
  26. ==============================

    26.

    <?php
    $url = "targetpage"
    Function redirect$url(){
       If (headers_sent()) == false{
          Echo '<script>window.location.href="' . $url . '";</script>';
    }}
    ?>
    
  27. ==============================

    27.

    이 작업을 수행하는 방법은 여러 가지가 있지만 PHP를 선호한다면 header () 함수를 사용하는 것이 좋습니다.

    원래

    $your_target_url = “www.example.com/index.php”;
    header(“Location : $your_target_url”);
    exit();
    

    한 단계 높은 수준으로 걷고 싶다면 함수에서 사용하는 것이 가장 좋습니다. 그런 식으로 인증 및 기타 검사 항목을 추가 할 수 있습니다.

    사용자의 레벨을 확인하여 시도해 보겠습니다.

    따라서 u_auth라는 세션에 사용자의 권한 수준을 저장했다고 가정합니다.

    function.php에서

    <?php
    
    function authRedirect($get_auth_level, $required_level, $if_fail_link = “www.example.com/index.php”){
        if($get_auth_level != $required_level){
            header(location : $if_fail_link);
            return false;
            exit();
        }else{
            return true;
        }
     }
    
     . . . 
    

    그런 다음 인증하려는 모든 페이지에 대해이 함수를 호출합니다.

    page.php 또는 다른 페이지와 같습니다.

    <?php
    
    // page.php
    
    require “function.php”
    
    authRedirect($_SESSION[‘u_auth’], 5);  // redirects to www.example.com/index.php if the user isn’t auth level 5
    authRedirect($_SESSION[‘u_auth’], 4);  // redirects to www.example.com/index.php if the user isn’t auth level 4
    authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”);  // redirects to www.someotherplace.com/somepage.php if the user isn’t auth level 2
    
    
    . . . 
    

    유용한 콘텐츠를 찾을 수 있기를 바랍니다.

    참고 문헌;

  28. ==============================

    28.

    1. header in-build PHP 함수 사용하기

    a) 매개 변수없이 간단한 리디렉션

    <?php
    
       header('Location: index.php');
    
    ?>
    

    b) GET 매개 변수를 사용하여 리디렉션

    <?php
    
          $id = 2;
    
          header("Location: index.php?id=$id&msg=succesfully redirect");
    
      ?>
    

    2. PHP에서 자바 스크립트로 리디렉션

    a) 매개 변수없이 간단한 리디렉션

    <?php 
    
         echo "<script>location.href='index.php';</script>";
    
     ?>
    

    b) GET 매개 변수를 사용하여 리디렉션

    <?php 
    
         $id = 2;
    
         echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
    
       ?>
    
  29. from https://stackoverflow.com/questions/768431/how-to-make-a-redirect-in-php by cc-by-sa and MIT lisence