如何正确创建相关链接

时间:2017-09-22 07:39:10

标签: php

在我的源代码中,这个按钮链接如下: enter image description here

然后网页的代码是这样的: enter image description here

但点击按钮时,网址为: http://localhost/personal/applications/mywebtest/install/?step=2

为什么要添加“/ personal / applications”?

3 个答案:

答案 0 :(得分:0)

编辑:让我先说......

href属性的工作原理

让我们说,你在http://example.com/foo/bar.html页面上,你有一个超链接,它可以是三个中的一个:

  • path/newpage.html - 这是一个相对路径(前面没有斜线),这意味着它会带你到http://example.com/foo/path/newpage.html
  • /path/newpage.html - 这是一个绝对路径(以斜杠开头),它将带您进入http://example.com/path/newpage.html
  • example.com/otherpage.html - 这仍然是一个相对路径(如第一个示例中所示),它将带您到http://example.com/example.com/otherpage.html * 这是因为浏览器不知道您是指域example.com还是带有点example.com的目录,因此将其视为目录是一种标准。
  • http://example.com/path/newpage.html - 这是一个绝对的网址(以协议开头) - 浏览器不需要在此进行任何猜测,可以直接转到http://example.com/path/newpage.html

(假设base未设置,请阅读其余部分或查看https://www.w3schools.com/tags/tag_base.asp

现在原来的答案

当您在relative元素中使用<a>个链接(无域名链接)时,您的浏览器需要一个完整的URL(带域名)才能在您点击该链接时满足此类请求。因此,需要使用当前协议(http)和域localhost并将其与$_SERVER['PHP_SELF']粘合,即

  

当前正在执行的脚本的文件名,相对于   文件根。例如,$ _SERVER [&#39; PHP_SELF&#39;]在脚本中   地址http://example.com/foo/bar.php将是/foo/bar.php。   (https://secure.php.net/manual/en/reserved.variables.server.php

因此,您可以按照https://stackoverflow.com/a/46359685/299774

的建议为href创建完整的网址
href=<?php echo $_SERVER['HTTP_HOST']."/mywebtest/install"; ?>?step=2';"

但是如果您想在数据库中保存此类HTML(例如,它是您博客中的帖子),这可能会导致问题 - 然后将您的应用移动到其他域需要更改数据库中的内容并填写它新域名。

所以我会坚持href中的相对值,您可以通过在HTML中设置base元标记来实现这一点:https://stackoverflow.com/a/6848509/299774

或者使用mod_rewrite或类似的工具四,你的服务器,但它已经很久了我已经做了+超出这个问题的范围,但你可以检查流行的框架(CakePHP,Laravel)他们如何做它。

(他们必须这样做,因为能够在域之间移动应用程序是必须的:本地测试,分期,生产)

答案 1 :(得分:-1)

那是因为PHP_SELF将磁盘上的路径返回到当前文件。 PHP本身并不知道页面的提供位置和方式。您必须为链接找到另一个变量/策略。另外,如果您真的想要链接到同一页面,可以使用?step=2

答案 2 :(得分:-1)

you can use of $_SERVER['HTTP_HOST']

         <input type="button" name="step" value="Continue to step 2 of 3"
onClick="location.href = '<?php echo (isset($_SERVER['HTTPS'])?"https" : "http")."://". $_SERVER['HTTP_HOST']."/mywebtest/install/"; ?>?step=2';"/>