PHP를 사용하여 사용자를 다른 페이지로 리디렉션할 수 있습니까?
www.example.com/page.php
로 이동하고 www.example.com/index.php로 리디렉션하고 싶다고 www.example.com/index.php
해 보겠습니다. 메타 새로 고침을 사용하지 않고 어떻게 그렇게 할 수 있습니까? 가능합니까?
이것은 승인되지 않은 사용자로부터 내 페이지를 보호할 수도 있습니다.
질문자 :Sam
PHP를 사용하여 사용자를 다른 페이지로 리디렉션할 수 있습니까?
www.example.com/page.php
로 이동하고 www.example.com/index.php로 리디렉션하고 싶다고 www.example.com/index.php
해 보겠습니다. 메타 새로 고침을 사용하지 않고 어떻게 그렇게 할 수 있습니까? 가능합니까?
이것은 승인되지 않은 사용자로부터 내 페이지를 보호할 수도 있습니다.
기존 답변과 내 자신의 2센트 요약:
header()
함수를 사용하여 새 HTTP 헤더를 보낼 수 있지만 HTML이나 텍스트보다 먼저 브라우저로 보내야 합니다( <!DOCTYPE ...>
선언 이전).
header('Location: '.$newURL);
die() 또는 exit()
header("Location: http://example.com/myOtherPage.php"); die();
die()
또는 exit()
를 사용해야 하는 이유 : Daily WTF
절대 또는 상대 URL
2014년 6월부터 절대 및 상대 URL을 모두 사용할 수 있습니다. 절대 URL만 허용되는 이전 RFC 2616을 대체한 RFC 7231 을 참조하세요.
상태 코드
PHP의 "위치" 헤더는 여전히 HTTP 302 - 리디렉션 코드를 사용합니다. 이것은 "임시" 리디렉션이며 사용해야 하는 리디렉션이 아닐 수 있습니다. 301 (영구 리디렉션) 또는 303 (기타)을 고려해야 합니다.
참고: W3C는 303 헤더가 "많은 pre-HTTP/1.1 사용자 에이전트와 호환되지 않습니다. 현재 사용되는 브라우저는 모두 HTTP/1.1 사용자 에이전트입니다. 스파이더 및 로봇과 같은 다른 많은 사용자 에이전트에는 해당되지 않습니다.
PHP의 HTTP 헤더와 header()
http_redirect($url);
의 대체 방법을 사용할 수 있습니다. PECL 패키지 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(); }
언급한 바와 같이 header()
리디렉션은 아무것도 작성되기 전에만 작동합니다. HTML 출력 중에 호출 되면 일반적으로 실패합니다. 그런 다음 다음과 같은 HTML 헤더 해결 방법(별로 전문적이지 않습니다!)을 사용할 수 있습니다.
<meta http-equiv="refresh" content="0;url=finalpage.html">
또는 JavaScript 리디렉션도 있습니다.
window.location.replace("http://example.com/");
header()
함수 를 사용하여 HTTP Location
헤더 를 보냅니다.
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); ?>
세 번의 실행 결과:
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
재개 — 의무적인 die()
/ exit()
는 실제 PHP와 아무 관련이 없는 일부 도시 전설입니다. Location:
헤더를 "존중하는" 클라이언트와 관련이 없습니다. 헤더를 보내도 사용되는 클라이언트에 관계없이 PHP 실행이 중지되지 않습니다.
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()!
작업을 수행할 echo를 사용하여 PHP에서 JavaScript를 출력합니다.
echo '<script type="text/javascript"> window.location = "http://www.google.com/" </script>';
페이지 출력을 버퍼링한 다음 나중에 리디렉션 조건을 확인하지 않는 한 PHP에서는 실제로 이 작업을 수행할 수 없습니다. 너무 번거로운 일일 수 있습니다. 헤더는 페이지에서 가장 먼저 전송되는 것임을 기억하십시오. 대부분의 리디렉션은 일반적으로 페이지의 뒷부분에 필요합니다. 이를 위해 페이지의 모든 출력을 버퍼링하고 나중에 리디렉션 조건을 확인해야 합니다. 이 시점에서 페이지 사용자 헤더()를 리디렉션하거나 단순히 버퍼링된 출력을 에코할 수 있습니다.
버퍼링에 대한 자세한 내용(장점)
1. 헤더 없이
여기서 당신은 어떤 문제에 직면하지 않을 것입니다
<?php echo "<script>location.href='target-page.php';</script>"; ?>
exit()
와 함께 헤더 함수 사용하기
<?php header('Location: target-page.php'); exit(); ?>
그러나 헤더 기능을 사용하는 경우 헤더를 보내기 전에 에코 또는 인쇄하지 않는 것을 해결하기 위해 "헤더가 이미 보낸 것과 같은 경고"가 표시 되거나 헤더 기능 뒤에 die()
exit()
ob_start()
및ob_end_flush()
와 함께 헤더 함수 사용
<?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 ?>
이 답변의 대부분은 매우 중요한 단계를 잊고 있습니다!
header("Location: myOtherPage.php"); die();
중요한 두 번째 줄을 생략하면 Daily WTF 에 표시될 수 있습니다. 문제는 브라우저가 페이지 반환, 그래서 헤더가 무시로, 페이지의 나머지 부분이 리디렉션없이 실행됩니다 헤더를 존중 할 필요가 없다는 것입니다.
사용하다:
<?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()
를 포함하는지 확인하십시오.
세션 변수를 사용하여 페이지에 대한 액세스를 제어하고 유효한 사용자에게도 권한을 부여할 수 있습니다.
<?php session_start(); if (!isset( $_SESSION["valid_user"])) { header("location:../"); exit(); } // Page goes here ?>
http://php.net/manual/en/reserved.variables.session.php .
최근에 사이버 공격을 받고 관리자 패널 또는 웹 응용 프로그램의 예약된 부분에 액세스하려는 사용자를 알아야 한다고 결정했습니다.
그래서 내 데이터베이스를 방해하고 싶지 않기 때문에 텍스트 파일에 IP 주소 및 사용자 세션에 대한 로그 액세스를 추가했습니다.
이러한 답변 중 많은 부분이 정확하지만 절대 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
다음 코드를 사용하십시오.
header("Location: /index.php"); exit(0);
header( 'Location: http://www.yoursite.com/new_page.html' );
나는 이미 이 질문에 대답했지만, 그 동안 CLI에서 실행하는 경우(리디렉션이 발생할 수 없으므로 exit()
해서는 안 됨) 특별한 경우가 있다는 것을 배웠기 때문에 다시 할 것입니다. 웹 서버가 PHP를 (F)CGI로 실행 중입니다(적절하게 리디렉션하려면 Status
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(); } }
또한 이전 답변의 주석에서 해결된 것처럼 301
, 302
, 303
및 307
)를 지원하는 문제를 처리했습니다. 다음은 설명입니다.
방문자를 다른 페이지로 리디렉션하려면(특히 조건부 루프에서 유용함) 다음 코드를 사용하기만 하면 됩니다.
<?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 헤더는 모든 유형의 콘텐츠 before
이것은 헤더 앞에 문자를 보내지 않아야 함을 의미합니다. 빈 공간도 마찬가지입니다!
임시/영구 리디렉션
기본적으로 위에 제시된 리디렉션 유형은 임시 유형입니다. 즉, 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(); ?>
위의 링크를 클릭하면 자동으로 이 페이지로 리디렉션됩니다. 또한 영구 리디렉션(상태: 301 영구 이동)입니다. 따라서 첫 번째 URL을 Google에 입력하면 자동으로 두 번째 리디렉션된 링크로 리디렉션됩니다.
PHP 코드의 해석
header() 뒤에 있는 PHP 코드는 방문자가 리디렉션에 지정된 주소로 이동하더라도 서버에서 해석됩니다. 대부분의 경우 서버의 부하를 줄이기 위해 exit()
header()
함수를 따라가는 메서드가 필요하다는 것을 의미합니다.
<? header('Status: 301 Moved Permanently', false, 301); header('Location: address'); exit(); ?>
사용하다:
<?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. ?>
예, PHP를 사용할 수 있습니다. 다른 페이지로 리다이렉트 하겠습니다.
다음 코드를 시도하십시오.
<?php header("Location:./"); // Redirect to index file header("Location:index.php"); // Redirect to index file header("Location:example.php"); ?>
시맨틱 웹의 전야에 정확성은 고려해야 할 사항입니다. 불행히도 PHP의 "위치" 헤더는 여전히 HTTP 302 - 리디렉션 코드를 사용하는데, 이는 엄밀히 말하면 리디렉션에 가장 적합한 코드는 아닙니다. 대신 사용해야 하는 것은 303 입니다.
W3C는 303 헤더가 현재 사용 중인 브라우저가 없는 "많은 pre-HTTP/1.1 사용자 에이전트"와 호환되지 않는다고 언급할 만큼 친절합니다. 따라서 302는 사용되어서는 안되는 유물입니다.
... 아니면 다른 사람들처럼 그냥 무시해도 됩니다...
아래와 같은 JavaScript 메소드를 사용할 수 있습니다.
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
예, header() 함수를 사용할 수 있습니다.
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */ exit();
또한 모범 사례는 아래 코드 실행을 피하기 위해 header()
함수 바로 뒤에 exit() 함수를 호출하는 것입니다.
문서에 따르면 실제 출력이 전송되기 전에 header()
다른 사람들이 말했듯이 다음과 함께 위치 헤더를 보냅니다.
header( "Location: http://www.mywebsite.com/otherpage.php" );
그러나 다른 출력을 브라우저로 보내기 전에 이 작업을 수행해야 합니다.
또한 이것을 사용하여 특정 페이지에서 인증되지 않은 사용자를 차단하려는 경우 언급한 것처럼 일부 사용자 에이전트 는 이를 무시 하고 어쨌든 현재 페이지에서 계속하므로 죽어야 합니다( ) 보낸 후.
내 생각은 다음과 같습니다.
IMHO, 들어오는 요청을 리디렉션하는 가장 좋은 방법은 위치 헤더를 사용하는 것입니다.
<?php header("Location: /index.php"); ?>
이 명령문이 실행되고 출력이 전송되면 브라우저는 사용자를 리디렉션하기 시작합니다. 그러나 헤더를 보내기 전에 출력(echo / var_dump)이 없는지 확인하십시오. 그렇지 않으면 오류가 발생합니다.
이것은 원래 요청한 것을 달성하는 빠르고 더러운 방법이지만 이러한 종류의 리디렉션은 항상 301/302 리디렉션으로 해석되므로 검색 엔진은 항상 귀하의 색인 페이지를 랜딩 페이지/메인 페이지가 아닌 리디렉션된 페이지로 표시합니다.
따라서 웹 사이트의 SEO 설정에 영향을 미칩니다.
PHP에서 리디렉션하려면 다음을 사용하십시오.
<?php header('Location: URL'); exit; ?>
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)로 리디렉션되지 않습니다.
1. PHP 내장 함수인 header
사용하기
a) 매개변수가 없는 단순 리디렉션
<?php header('Location: index.php'); ?>
b) GET 매개변수로 리디렉션
<?php $id = 2; header("Location: index.php?id=$id&msg=succesfully redirect"); ?>
2. PHP에서 JavaScript로 리디렉션
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>"; ?>
<?php header('Location: B.php'); exit(); ?>
<button>
또는 <a>
도움을 받아야 하는 것보다 A.php 파일에서 B.php 로 라우팅하려고 한다고 가정합니다. 예를 보자
<?php if(isset($_GET['go_to_page_b'])) { header('Location: B.php'); exit(); } ?> <p>I am page A</p> <button name='go_to_page_b'>Page B</button>
B.php
<p> I am Page B</p>
두 가지 방법으로 수행할 수 있습니다.
사용자가에 올 때 https://bskud.com/PINCODE/BIHAR/index.php 다음에 재 https://bskud.com/PINCODE/BIHAR.php
아래 PHP 코드로
<?php header("Location: https://bskud.com/PINCODE/BIHAR.php"); exit; ?>
조건이 참이면 다른 페이지로 리디렉션합니다.
<?php $myVar = "bskud"; if ($myVar == "bskud") { ?> <script> window.location.href="https://bskud.com"; </script> <?php } else { echo "<b>Check the website name again</b>"; } ?>
사용하다:
<?php $url = "targetpage" function redirect$url(){ if (headers_sent()) == false{ echo '<script>window.location.href="' . $url . '";</script>'; } } ?>
이를 수행하는 방법은 여러 가지가 있지만 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” // Redirects to www.example.com/index.php if the // user isn't authentication level 5 authRedirect($_SESSION['u_auth'], 5); // Redirects to www.example.com/index.php if the // user isn't authentication level 4 authRedirect($_SESSION['u_auth'], 4); // Redirects to www.someotherplace.com/somepage.php if the // user isn't authentication level 2 authRedirect($_SESSION['u_auth'], 2, “www.someotherplace.com/somepage.php”); . . .
참조;
나는 초를 세고 난 후의 리디렉션을 좋아한다.
<?php header("Refresh: 3;url=https://theweek.com.br/índex.php");
이걸로 해봐
$url = $_SERVER['HTTP_REFERER']; redirect($url);
출처 : http:www.stackoverflow.com/questions/768431/how-do-i-make-a-redirect-in-php
Git에서 셸 명령을 실행할 때 사용할 개인 SSH 키를 지정하는 방법은 무엇입니까? (0) | 2022.07.09 |
---|---|
type()과 isinstance()의 차이점은 무엇입니까? (0) | 2022.07.09 |
주어진 요소에 클래스를 추가하는 방법은 무엇입니까? (0) | 2022.07.06 |
인쇄 기능의 출력을 어떻게 플러시할 수 있습니까? (0) | 2022.07.06 |
전체 경로가 주어진 모듈을 가져오는 방법은 무엇입니까? (0) | 2022.07.06 |