PHP $ _SERVER ['SERVER_NAME']正确使用

时间:2011-02-26 17:21:07

标签: php

noob问题

我正在使用php构建一个交互式网站,我决定做一个交互式菜单。好吧,我的菜单包含一个名为menu.php的文件。

<?php
    echo "<ul>
        <li><a href='".$_SERVER['SERVER_NAME']."/menu/register.php'>Cadastro</a><br></li>
        </ul>";
?>

我不知道为什么,但是当我点击此链接时,它看起来就像那样

HTPP://本地主机/ my_site /的本地主机 /menu/register.php

编辑:如何删除其他本地主机?

提前致谢

7 个答案:

答案 0 :(得分:7)

这是因为您没有使用http://前缀。你必须使用

   <li><a href='http://".$_SERVER['SERVER_NAME']."/menu/register.php'></li>

(假设http://是您的网站唯一的协议)

但是,如果您有一个固定的网站结构,请考虑使用同样有效的相对路径,但不要头疼:

 <li><a href='/menu/register.php'></li>

答案 1 :(得分:5)

$_SERVER['SERVER_NAME']仅包含Web服务器/虚拟主机的名称:

  

'SERVER_NAME'
  当前脚本正在其下执行的服务器主机的名称。如果脚本在虚拟主机上运行,​​则这将是为该虚拟主机定义的值。

在你的情况下,它是localhost。并向/menu/register.php附加路径会产生相对路径:

localhost/menu/register.php

现在,当您在基本URI为http://localhost/my_site/的文档(或具有相同路径前缀的类似URI)中使用该URI引用时,客户端会将该相对路径localhost/menu/register.php解析为:< / p>

http://localhost/my_site/localhost/menu/register.php

这就是你获得输出的原因。

那你到底想要完成什么?

答案 2 :(得分:4)

只需使用相对URI。

<li><a href='/menu/register.php'>Cadastro</a></li>

(您也可以抛弃<br>。如果要填充,请使用CSS填充。)

答案 3 :(得分:1)

你必须这样写:

echo "<ul>
    <li><a href='http://".$_SERVER['SERVER_NAME']."/menu/register.php'>Cadastro</a><br></li>
    </ul>";

或简单

echo "<ul>
    <li><a href='/menu/register.php'>Cadastro</a><br></li>
    </ul>";

答案 4 :(得分:1)

你可以省略

 $_SERVER['SERVER_NAME']

并使用相对路径。

答案 5 :(得分:1)

良好的做法是不要在href的

中使用服务器名称
<a href="/menu/register.php">register</a>

<a href="menu/register.php">register</a>

应该可以正常工作

如果您确实需要使用可以使用的服务器名称:

<a href='http://".$_SERVER['SERVER_NAME']."/menu/register.php'>Cadastro</a>

额外的localhost是因为浏览器将其解释为字符串而不是URL

答案 6 :(得分:-1)

我还建议使用$ _SERVER ['HTTP_HOST']而非$ _SERVER ['SERVER_NAME'],Ankur Kumar Singh在评论中说。

<li><a href='".$_SERVER['HTTP_HOST']."/menu/register.php'>Cadastro</a><br></li>

这对我有用,并且摆脱了我网站上的本地主机问题。