Reputation: 48973
I know this has been covered before but I cannot find an answer to this,
I have always used this;
header("Location: http://www.website.com/");
exit();
This has always worked in my current project and all of a sudden it is not working in any of my browsers
I would like to figure out the problem and fix it instead of using
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>";
I also have error reporting enabled and it shows no errors
// SET ERROR REPORTING
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
ini_set('display_errors', TRUE);
Any ideas why it will not work?
Upvotes: 15
Views: 69276
Reputation: 32155
Try:
<?php ob_start();?> --------->this code also
error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);
flush();
header("Location: http://www.website.com/");
die('should have redirected by now');
See what you get. You shouldn't use ^ (xor) in your error_reporting() call because you're unintentionally asking for all errors EXCEPT notices and warnings.. which is what a 'headers already sent' error is.
Edit:
Also try putting flush() right above your header() call.
Upvotes: 27
Reputation: 324
Had the same issue but for reloading. Was not reloading at all.
Fixed with this
echo "<script type='text/javascript'>location.reload();</script>"; exit;
I think it depends on the text editor used, encoding used, and windows or linux based php used, based on the other guys are commenting, could be many issues.
Upvotes: 0
Reputation: 56557
1) there should not be any output (i.e. echo..
or HTML codes) before the header(.......);
command.
2) there should not be a white-space(or newline) before <?php
and after ?>
tags.
3) GOLDER RULE! - the file (and other include()
-d files) should have UTF8 without BOM encoding (and not just UTF-8). That is problem in many cases (because typical UTF8 encoded file has something special character in the start of file output)!!!!!!!!!!!
4) When redirecting, after header(...);
you must use exit;
5) Recommended practice - always use 301 or 302 in reference:
header("location: http://example.com", true, 301 ); exit;
6) If none of above helps, use JAVSCRIPT redirection(but it's highly not recommended By Google), but it may be the last chance...:
echo "<script type='text/javascript'>window.top.location='http://example.com/';</script>"; exit;
Upvotes: 21
Reputation: 2888
I actually had a case similar to this where I had an admin page that was included at the top of all my other pages. At the top of each page below the line:
<?php include '../../admin.php' ?>
I would have the php logic:
<?php if($_SESSION['username'] === null){ header("Location: ./adminLogin.php");}?>
The problem with this was that somewhere else I was also calling/manipulating the header(...
. After a lot of time going through my code I admit I could not figure out where the problem was. Then I thought that each of these files hits my admin.php
file before doing anything else. So I thought about what would happen if I would put the logic that was at the top of each of my views (because I didn't want anything to be visible unless you were logged in) into my admin.php
file?
What happened was that before it even got to any of the php/html in my views it evaluated whether or not someone was logged in ($_SESSION['username'])
) and if it was NULL
then I just redirected to the adminLogin page. I put this logic right before my switch and it's worked perfectly for all my files that once required the logic. The way I had it worked in development, but posed a lot of issues in production. I found that moving the redirection logic to my admin.php
file not only avoided the duplicate header(...
manipulation but actually made my code more efficient by removing the excess logic from my view files and into my admin.php
file.
Rather than putting the logic in every view file, put it in your controller once, before your switch. Works like a charm! This is useful if you don't want anyone to access any of the sensitive views unless they log in. In my case this was important for my CMS. However, if there are some files that you want to be viewable without logging in then I think the original logic would be sufficient. It seems like you already found a solution but hopefully this can be helpful if you run into this error again. :)
Upvotes: 0
Reputation: 734
If your index page is a html file, it may not work. Change it to index.php and use this code:
<?php
header("Location: http://ea.tc");
?>
Upvotes: 0
Reputation: 656
Try this (working for me):
echo '<script>window.location.replace("http://www.example.com")</script>';
Instead of
header("Location: http://www.example.com");
Upvotes: 2
Reputation: 36
Weird, but removing blank lines in php worked for me :-\
code before:
<?php
header("Location: http://www.website.com/");
?>
code that worked:
<?php header("Location: http://www.website.com/"); ?>
Upvotes: 0
Reputation: 104
It may be strange solution but try this, change the page encoding from utf8 to ANSI and it will work.
use any text editor and save the page as ANSI encoding and upload it to your online server.
Upvotes: 1
Reputation: 3668
try this. worked for me.
echo "<meta http-equiv='refresh' content='0;url=http://www.yoursite.com'>";
Upvotes: 6
Reputation: 61577
Try removing the Space Between location and the first h in http.
header("Location: http://www.website.com/");
exit();
turns into
header("Location:http://www.website.com/");
exit();
I had this problem on my WAMP Server.
Although it shouldn't be the problem, considering that is how it is documented in the PHP documentation. But you should probably try it anyway. I know it has worked for me in a number of cases.
Upvotes: 13
Reputation: 5536
You should also verify that you are redirecting to a valid location, and that the location has proper 404 and 500 error messages/pages setup. It could be that you are simply redirecting a bad place.
Upvotes: 0
Reputation: 12212
What exactly happens when you visit the page? You can try Firebug or any other tool that allows you to analyze HTTP headers and check if the redirect really happens and whether the Location
header is really present.
Upvotes: 0
Reputation: 11211
Also when you are using the header function it has to be the first thing called before any text (even a space) is written to the client, so check again that there is no spaces being output prior to your call even before th
<?php
Upvotes: 1