Hướng dẫn redirect php file - chuyển hướng tệp php

Trong việc lập trình web bạn không thể thiếu việc chuyển người dùng từ trang này qua trang kia. Ví dụ như sau khi login thì chuyển người dùng về trang chủ. Hoặc vào các nội dung cần xác thực thì phải chuyển người dùng về trang login.

1. Chuyển trang bằng HTTP header

PHP hỗ trợ chuyển trang bằng cách trả về HTTP header Location theo đặc tả của giao thức HTTP. Khi trình duyệt nhận được response từ server có HTTP header "Location" thì trình duyệt sẽ tự động chuyển hướng đến url được chỉ định.

HTTP header:

Location: <new_URL>

Cách thực hiện đơn giản như sau.

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>

Trường hợp bạn muốn chuyển hướng ra trang ngoài không phải trang hiện tại của bạn. Thì bạn hãy để đầy đủ đường dẫn URL.

<?php 
header("Location: https://google.com");
exit;

Các lỗi thường gặp khi sử dụng chuyển hướng bằng header

Lỗi 1:
<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
9

Khi thực hiện chuyển trang bằng cách này. Tức là bạn đang thay đổi các giá trị HTTP header mặc định. Rất có thể bạn sẽ bị thông báo lỗi khi sau:

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
9. Để khác phục được lỗi này. Bạn cần hiểu bản chất vấn được được giải thích như sau. Nếu bạn đang gấp Bỏ qua cách chuyển hướng này và sử dụng các cách chuyển hướng ở bên dưới.Nếu bạn đang gấp Bỏ qua cách chuyển hướng này và sử dụng các cách chuyển hướng ở bên dưới.

Giải thích:

Theo đặc tả một gói tin HTTP có cấu trúc như sau:

HEADER
<cách 2 dòng>
BODY

Mỗi dấu xuống dòng ở trên là cặp kí tự

<?php 
header("Location: https://google.com");
exit;
1;

Ví dụ khi bạn xuất dòng chữ "Hello world". File hello.php

<?php
echo "Hello world";

Thì cấu trúc của gói tin trả về như sau:

HTTP/1.1 200 OK
Server: nginx/1.17.6
Content-Type: text/html
Connection: keep-alive

Hello world

Dòng header khác này, có thể có hoặc không có, hoặc có nhiều hơn các thông tin - chỉ thị khác. Vì vậy trong các ví dụ sau mình giảm bớt các dòng header không liên quan tới nội dung bài viết.

Server: nginx/1.17.6
Content-Type: text/html
Connection: keep-alive

Nếu chúng ta đặt lệnh header phía trước lệnh echo sẽ thành ra như thế này:

<?php
header("Location: /index.php");
echo "Hello world";

Thì cấu trúc của gói tin trả về như sau:

HTTP/1.1 200 OK
Location: /index.php

Hello world

Dòng header khác này, có thể có hoặc không có, hoặc có nhiều hơn các thông tin - chỉ thị khác. Vì vậy trong các ví dụ sau mình giảm bớt các dòng header không liên quan tới nội dung bài viết.

<?php
echo "Hello world";
header("Location: /index.php");

Nếu chúng ta đặt lệnh header phía trước lệnh echo sẽ thành ra như thế này:

Vậy nếu ta đổi ngược 2 lệnh trên. Thì kết quả sẽ được như sau:

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
0

Chúng ta sẽ bị lỗi

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
9; Nhưng trong trường hợp tắt warning, website vẫn chạy được.

Trong các trường hợp thực tế, ta hay để code php bên trong đoạn mở như sau:

Như vậy ta cũng bị lỗi
<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
9;

Chúng ta phải đảm bảo các lệnh

<?php 
header("Location: https://google.com");
exit;
4 được gọi trước tất cả các output khác.Nguyên nhân lỗi là bị điều hướng liên tục.

Lỗi 2:

<?php 
header("Location: https://google.com");
exit;
5

Một lỗi thứ 2 thường bị khi sử dụng cách này là lỗi

<?php 
header("Location: https://google.com");
exit;
5 thường thấy mã lỗi này trên Chrome. Ở các trình duyệt khác, hình thức hiện lỗi có thể khác. Nguyên nhân lỗi là bị điều hướng liên tục.Nếu đang ở trang hiện tại, thì không được chuyển nữa. Ví dụ như URL hiện tại của chúng ta là
<?php 
header("Location: https://google.com");
exit;
8 thì ta phải kiểm tra thông tin
<?php 
header("Location: https://google.com");
exit;
9 cho ta được đoạn sau domain
HEADER
<cách 2 dòng>
BODY
0.

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
1

Ví dụ như trình duyệt đang ở trang index.php, nhưng lại có lệnh

<?php 
header("Location: https://google.com");
exit;
7. Vậy là khi ta vào trang index.php lại bị đá về index.php, liên tục như vậy. Đến một số lần quy định, Chrome sẽ không thèm chuyển hướng theo chỉ thị Location header nữa. Mà báo ra lỗi này.

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
2

Để giải quyết, chúng ta phải check điều kiện chuyển trang. Nếu đang ở trang hiện tại, thì không được chuyển nữa. Ví dụ như URL hiện tại của chúng ta là

<?php 
header("Location: https://google.com");
exit;
8 thì ta phải kiểm tra thông tin
<?php 
header("Location: https://google.com");
exit;
9 cho ta được đoạn sau domain
HEADER
<cách 2 dòng>
BODY
0.

Nhưng các bạn tự lưu ý là, đối với index.php là 1 trường hợp khá đặc biệt. Vì chúng ta vào url HEADER <cách 2 dòng> BODY1 thì thông thường cũng là truy cập vào file HEADER <cách 2 dòng> BODY2. Tức là tương tự như vào <?php header("Location: https://google.com"); exit;8. Lúc này, <?php header("Location: https://google.com"); exit;9 cho chúng ta giá trị là HEADER <cách 2 dòng> BODY5. Vậy ta sửa lại như sau:

Nếu bạn đang cảm thấy mơ hồ hoặc thấy khó khăn, thì vui lòng đọc tiếp các cách khác bên dưới.

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
3

2. Chuyển trang bằng HTML

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
4

Ngoài cách điều hướng bằng php, chúng ta có thể dùng html tag. như sau:

Với số
HEADER
<cách 2 dòng>
BODY
6 là số giây sẽ delay. Sau đó sẽ truyển trang về url được khai báo. Như ta muốn chuyển về google.com sau 5s thì ta sẽ ghi như sau:

Với số

HEADER
<cách 2 dòng>
BODY
6 là chuyển ngay lập tức.

Lưu ý:

Sử dụng cách này các bạn cũng không thể tránh khỏi lỗi chuyển trang liên tục như trên. Khi chuyển trang không chuyển về trang hiện tại.

3. Chuyển trang bằng JavaScript

Với số
HEADER
<cách 2 dòng>
BODY
6 là số giây sẽ delay. Sau đó sẽ truyển trang về url được khai báo. Như ta muốn chuyển về google.com sau 5s thì ta sẽ ghi như sau:

Với số

HEADER
<cách 2 dòng>
BODY
6 là chuyển ngay lập tức.

Lưu ý:

Sử dụng cách này các bạn cũng không thể tránh khỏi lỗi chuyển trang liên tục như trên. Khi chuyển trang không chuyển về trang hiện tại.

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
6

3. Chuyển trang bằng JavaScript

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
3

Chúng ta biết rằng JS được dùng để sử lí giao diện là trùm luôn. Vì vậy chuyển trang đối với JS chỉ là chuyện nhỏ. Cách thực hiện như sau:

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
5

<?php 
// các xử lí
// Tiến hành chuyển hướng
header("Location: /index.php");
exit;

// có thể các còn các xử lí khác không được thực hiện.
?>
5

Tương tự, sử dụng cách này các bạn cũng không thể tránh khỏi lỗi chuyển trang liên tục như trên. Khi chuyển trang không chuyển về trang hiện tại.

Tổng hợpHoàng Phúc

Chuyển trang bằng PHP:

Chuyển trang bằng HTML:


html Chuyển trang bằng JavaScript: