简体   繁体   中英

If current URL equals rediectURL do nothing

Hey guys I am trying to build a redirect script in my header. It contains a variable called $redirect that either equals 0 or 1.

What I want to do is if the variable equals 1 to redirect the user to a specified page. That works. The problem I am having is when it reaches the redirected URL it creates a loop. I tried writing the following code but it does not work. What have I done wrong?

<?php
$redirect = 1;
$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self";

$redirectURL = '/protest/cispa.php';
if ( $redirect === 1 ) {
if ( $url === $redirectURL ) {
die();
}
else {
header("Location: $redirectURL");
exit;
}}
?>

As suggested by andrewsi I updated my code to the following at it works:

<?php
$redirect = 0;
$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
$url = $self;

$redirectURL = '/protest/cispa.php';
if ( $redirect === 1 ) {
if ( $url === $redirectURL ) {
}
else {
header("Location: $redirectURL");
exit;
}
}
?>
$url = !empty($query) ? "http://$host$self?$query" : "http://$host$self";

$redirectURL = '/protest/cispa.php';

Your $url contains a fully qualified domain name; the redirectURL is just a path. The two are never going to be equal. Try setting :

$url = $self;

(If I'm reading your code correctly)

You could stick a flag in the query string of your redirect. Then, if the flag is present, don't add the redirect.

ex;

http://www.yoursite.com/redirectedto.php?red=1

Now, if red is set, I would not add the redirect.

lee

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM