php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #19265 header + relative location + cgi + aliasmatch fails
Submitted: 2002-09-06 09:36 UTC Modified: 2002-10-08 12:38 UTC
Votes:2
Avg. Score:1.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: steve at bluearena dot com Assigned:
Status: Not a bug Package: Output Control
PHP Version: 4CVS-2002-09-06 OS: Linux
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: steve at bluearena dot com
New email:
PHP Version: OS:

 

 [2002-09-06 09:36 UTC] steve at bluearena dot com
I have run into a problem with the above setup on both the latest snapshot and also 4.2.2 - sorry if it's not a bug.

<?
if(!$test) die(header("Location: /?test=true"));
else die("redirected ok: $REQUEST_URI");
?>

This works fine, and as expected, the output is:
redirected ok: /?test=true

However if I have the following lines in my httpd.conf:
DocumentRoot /home/bla/html
AliasMatch ^/sess/(.{4})/(.*) /home/bla/html/$2

And change the script to:
<?
if(!$test) die(header("Location: /sess/1234/?test=true"));
else die("redirected ok: $REQUEST_URI");
?>

The output is:
redirected ok: /

I'm not quite sure what is going on here. I have just switched from an Apache module to CGI version for security reasons and wasn't quite expecting this problem so came into an interesting problem, a loop in my program, and crashes out with an error 500:

GET / HTTP/1.0
host: www.mydomain.com

HTTP/1.1 500 Internal Server Error
Date: Fri, 06 Sep 2002 14:30:35 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.2 mod_ssl/2.8.10 OpenSSL/0.9.6g
X-Powered-By: PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3, PHP/4.2.3
Connection: close
Content-Type: text/html; charset=iso-8859-1


Changing it to a absolute URL in the header("Location   fixes the problem but it would be a pain to change this in all my scripts. Thanks a lot for your help.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-09-06 19:40 UTC] yohgaki@php.net
First of all, your redirect is wrong.
You must use absolute URI for Location header.

Try absolute URI, if it fixes.

 [2002-09-07 06:28 UTC] steve at bluearena dot com
A relative location works most of the time. It always works with the Apache module, and the CGI version only fails when the aliasmatch directive is set.

Anyway, I worked around this by using mod_rewrite instead of AliasMatch, so I'm not particularly bothered - but I'm quite sure that a lot of people use relative URIs with the Location header so it might be worth looking into.

I realise the official standard says the URIs should be absolute, but IE, Netscape, and Lynx, maybe others, support relative.

Steve
 [2002-10-08 12:09 UTC] iliaa@php.net
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions. 

Thank you for your interest in PHP.

If people use incorrect (relative pathes) in the Location: header they cannot expect consistent behaviour. It may work in some browser and it may not work in others. 
 [2002-10-08 12:38 UTC] steve at bluearena dot com
I am trying to demonstrate that the same PHP code which works on the Apache module, fails with the CGI module. Both with Internet Explorer as the client.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 22:01:28 2024 UTC