doulu8537
doulu8537
2016-06-02 09:24

PHP重定向到localhost

已采纳

I have a live site and I want to redirect a page to my current machine I'm developing on. I tried the following

header('HTTP/1.1 307 Temporary Redirect');
header('Location: http://localhost/dev/test.php');

The redirection should NOT be done to the live server's localhost, but to my local machine I'm currently using to develop. This is simply to test a payment gateway I've added to my site (the payment gateway requires a valid URL to redirect to, hence I can't use localhost).

The payment gateway will redirect to

http://www.example.com/test.php

Which should then be redirected to my current machine:

http://localhost/dev/test.php

If php can't manage this, can I do this with apache redirects? I also want to send all GET and POST parameters received at the live server to my local page.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • duanchai0028 duanchai0028 5年前

    You don't need to send the HTTP 1.1 header and that might be what's preventing the redirect from working. Your web server will add this one automatically because it needs to send the status code. Instead, pass the 307 status as header()'s third parameter:

    header('location: http://localhost/some/url', true, 307);
    

    The redirect headers are parsed by your browser, so "localhost" will be the same machine your browser is running on.

    To pass all the GET parameters, you could append $_SERVER['QUERY_STRING'] to the URL:

    header('location: http://localhost/some/url?' . $_SERVER['QUERY_STRING'], true, 307);
    

    POST parameters are more complicated. You'll need to build your own URL by concatenating everything from the $_POST array. Be sure to urlencode() the values.

    $redirect_url = 'http://localhost/some/url?';
    foreach($_POST as $key => $value){
        $redirect_url .= $key . '=' . urlencode($value) . '&';
    }
    header('location: ' . $redirect_url, true, 307);
    

    And bear in mind you can only redirect a POST request as a GET. But if you're just building a mock for testing your gateway integration, that should be fine.

    点赞 评论 复制链接分享
  • doulingzhuang3079 doulingzhuang3079 5年前

    You should not use localhost as it is always being resolved by the client machine.

    header('Location: http://localhost/dev/test.php');
    

    Replace localhost by your server domain name like this:

    header('Location: http://yourliveserver.com/dev/test.php');
    
    点赞 评论 复制链接分享

为你推荐