代码之家  ›  专栏  ›  技术社区  ›  Glen Solsberry

子域的php重定向问题

  •  3
  • Glen Solsberry  · 技术社区  · 14 年前

    我使用php将一个页面重定向回上一个页面,如下所示:

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

    这组页面只供内部用户使用,所以我并不担心referer并不总是可用。

    我遇到的问题是如果推荐人看起来像 http://subdomain.domain.com/test.php?id=13 ,重定向结果将转到 http://subdomain.domain.com/.domain.com/test.php?id=13 . 注意附加的 .domain.com/ 在URL中。

    我通过对值进行硬编码进行了测试,它也导致了问题。 phpMyAdmin 似乎遇到了相同的问题,但仅限于此特定服务器。

    如果不是这样的问题,请采取相应的行动。

    编辑 Py@ ygGo

    test.php仅包含 header("Location: http://subdomain.domain.com/test2.php");

    curl --head --referer 'http://subdomain.domain.com/' 'http://subdomain.domain.com/test.php'
    
    HTTP/1.1 302 Found
    Server: nginx/0.7.64
    Date: Fri, 02 Apr 2010 17:21:45 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    X-Powered-By: PHP/5.2.12-pl0-gentoo
    Location: .domain.com/test2.php
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   zaf    14 年前

    看来你的nginx配置导致了这些问题。

    nginx完全有可能正在修改响应头。这不是默认的-你可以有一个配置,它的目的是作为一个反向代理等行为。

    你试过用nginx的默认配置测试重定向吗?

        2
  •  2
  •   bjelli    14 年前

    我已经在我的服务器上重新创建了两个程序 曾经与

    header("Location: http://subdomain.domain.com/some/place");
    

    还有一次

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

    都给出了相应的结果

    curl --head --referer 'http://subdomain.domain.com/some/place' 'http://subdomain.domain.com/test.php'
    
    HTTP/1.1 302 Found
    Date: Fri, 02 Apr 2010 17:48:54 GMT
    Server: Apache/2.0.52 (Red Hat)
    X-Powered-By: PHP/5.1.2
    Location: http://subdomain.domain.com/some/place
    Connection: close
    Content-Type: text/html
    

    我使用的是不同版本的php和不同的web服务器,所以有两件事需要研究。

        3
  •  1
  •   jholster    14 年前

    […]重定向的结果是 http://subdomain.domain.com/.domain.com/test.php?id=13 .

    你能把这个问题再隔离一点吗?这个url到底是php返回的还是浏览器(chrome?)看到了吗?

    你能检查一下实际的页眉吗,例如卷曲:

    $ curl --head --referer 'http://your-referer' 'http://your-page/'
    
        4
  •  -2
  •   Val    14 年前

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

    编辑:

    检查你的.htaccess设置,或者如果没有找到解决方案,你可以使用preg_replace删除最后一个“.domain.com”

    但看起来这不是一个php错误。

    或者使用javascript获取referer地址… 然后使用window.location.ref=url;重定向…