【问题标题】:PHP - Absolute & Relative URL TypesPHP - 绝对和相对 URL 类型
【发布时间】:2017-04-19 01:07:15
【问题描述】:

我用PHP写了一个登录代码:

<form NAME="form1" METHOD="POST" ACTION="operation/validateLogin.php">
        Username <br/><input name="username" type=text autocomplete="off"><br/><br/>
        Password <br/><input name="password" type=text autocomplete="off"><br/><br/>
        <button class="btn btn-primary submit" type="submit">Sign In</button>
</form>

当我提交表单时,凭据会发送到验证文件。如果发生错误,文件会将错误消息发送回登录页面:

header("Location: http://localhost/demoapp/login.php/?em=28");

我处理 'GET' 参数并打印错误消息:

if (isset($_GET['em'])){
        if($_GET['em'] == 28){$errorMessage = "Your username or password was incorrect.";}
}

现在用户需要重新提交表单尝试再次登录,但是表单的动作是:

operation/validateLogin.php

现在的网址是:

http://localhost/demoapp/login.php/?em=28

因此,当表单提交时,url 变为:

http://localhost/demoapp/login.php/operation/validateLogin.php

什么时候应该……

http://localhost/demoapp/operation/validateLogin.php

如何防止 URL 发生这种情况?

【问题讨论】:

    标签: php forms post login get


    【解决方案1】:

    可以使用相对 URL 设置 HTML 表单的 ACTION 属性:

    /operation/validateLogin.php
    

    /validateLogin.php
    

    实际上建议使用 HTML 元素的相对 URL: Absolute vs relative URLs

    但是,当使用 PHP 时,绝对 URL 是您的最佳选择:

    http://localhost/demoAPP/operation/validateLogin.php
    

    使用绝对 URL 将减少您的代码意外 URL 连接。

    我最近在确定在某些情况下使用哪种类型的 URL 时遇到了麻烦,但这就是我意识到的......

    PHP(本地/服务器语言)= 绝对本地/服务器地址

    require "C:/dev/www/DEMO/operation/login/validateLogin.php";
    include "C:/dev/www/DEMO/operation/login/validateLogin.php";
    header("Location: http://localhost/demoapp/login.php/?em=28"); (redirect to a web address)
    

    这看起来很简单,但记住这一点将为您节省大量的故障排除时间。

    如果您使用 .PHP 文件,以任何方式更改 URL,并且不使用绝对 URL,您肯定会收到错误。


    附加:您会注意到您可以将网址用于 HTML 属性并且不会遇到任何问题。但是,对于 PHP 要求和包含,您只能使用本地地址。这种限制是有原因的,这完全是因为一个重要的 PHP 设置......

    https://help.dreamhost.com/hc/en-us/articles/214205688-allow-url-include

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2012-10-27
      • 2015-11-13
      • 2011-01-01
      相关资源
      最近更新 更多