但点击按钮时,网址为: http://localhost/personal/applications/mywebtest/install/?step=2
为什么要添加“/ personal / applications”?
答案 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';"/>