2011-11-03 42 views
5

Nó hoạt động khi tôi nhập vào

header("Location: http://www.google.com"); 

nhưng nó không hoạt động khi tôi có

header("Location: $_SERVER['HTTP_REFERER']"); 

tôi muốn chuyển hướng trang để bất cứ điều gì trang mà nó đến từ đâu.

+7

Không phải tất cả trình duyệt đều gửi một người giới thiệu và một số trình duyệt đó gửi dữ liệu không có thật. Đồng thời, bạn không thể sử dụng dấu ngoặc kép trên một khóa mảng trong một chuỗi được trích dẫn kép như vậy. hãy thử 'header (" Location: {$ _SERVER ['HTTP_REFERER']} ");' thay vào đó. –

+1

Bạn đã kiểm tra nội dung của '$ _SERVER ['HTTP_REFERER']' chưa? – PeeHaa

+0

đầu ra của chuỗi này là: echo "Vị trí: $ _SERVER ['HTTP_REFERER']"; ? –

Trả lời

5

Hãy thử nó: :)

if (!empty($_SERVER['HTTP_REFERER'])) 
    header("Location: ".$_SERVER['HTTP_REFERER']); 
else 
    echo "No referrer."; 

Tuy nhiên, để xác định mà người dùng trang đến từ đâu, tôi muốn sử dụng biến session, mà được thiết lập lại ở mỗi trang:

session_start(); 
echo "Previous page:", $_SESSION['loc']; 
$_SESSION['loc']=$_SERVER['PHP_SELF']; 

ps: Điều này chỉ hoạt động cho các trang địa phương, bạn không thể theo dõi các trang web khác.

2

Đây là một tính năng trình duyệt, và bất kỳ trình duyệt lịch sự sẽ gửi đúng tiêu đề (mặc dù công cụ 'an ninh' khác nhau sẽ ghi đè này với một referer giả).

Trình duyệt cụ thể để không phải mọi kết hợp trình duyệt/phần mềm bảo mật đều sẽ gửi đến máy chủ. Bạn nên thiết lập một biến phiên trên mỗi tải trang để xác định trang người dùng đến từ (hoặc một cái gì đó tương tự với một chút logic hơn)

+0

để tạo phiên của url hiện tại trên mỗi trang? –

4

Bạn có thể thử:

header("Location: {$_SERVER['HTTP_REFERER']}"); 

Tôi đã có các vấn đề với các biểu thức biến chứa dấu ngoặc kép trong các chuỗi không có dấu ngoặc.

Bạn cũng cần tìm kiếm $_SERVER['HTTP_REFERER'] chỉ đơn giản là không được đặt. Một số tác nhân người dùng không đặt nó, một số công cụ riêng tư che giấu nó và bạn cần xử lý những người đến trang của bạn mà không có liên kết giới thiệu.

3

Đây là giải pháp đơn giản. kiểm tra và xem những gì $ _SERVER [ 'HTTP_REFERER'] được đem lại cho bạn và nếu thiết lập của nó thì bạn có thể chuyển hướng và nếu không đặt một mùa thu trở lại url cái gì đó như:

if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != ""){ 
$url = $_SERVER['HTTP_REFERER']; 
}else{ 
$url = "YOUR INDEX PAGE OR SOMETHING"; 
} 

header("Location: ".$url); 
0

Đơn giản chỉ cần bạn có thể sử dụng

if(isset($_SERVER['HTTP_REFERER'])){ 
    header("Location:".$_SERVER['HTTP_REFERER'].""); 
} 
1
header("Location: $_SERVER[HTTP_REFERER]"); 

Không có dấu ngoặc đơn. Đây là cách nhanh nhất để truy cập và ghép các giá trị mảng mà không cần thêm mã nối.

Các vấn đề liên quan