【问题标题】:How do I get absolute URL's to work locally?如何让绝对 URL 在本地工作?
【发布时间】:2016-03-09 06:23:55
【问题描述】:

在我的实时网站上一切正常,但因为我在 header.phpfooter.php 中使用绝对 URL,所以当我在本地工作 (XAMPP) 时它们不起作用 - 我想不通了解如何让它在两者上都起作用。

Header.php

<div id="top"><center><img src="http://cosworth-europe.com/images/header.png" style="max-width:100%;"></center></div>
<header id="header" class="site-header" role="banner">
<div id="header-inner" class="container sixteen columns over">
<hgroup class="one-third column alpha">

</hgroup>
    <nav id="main-nav" class="two thirds column omega">
        <ul>
            <li>
                <a href="http://www.cosworth-europe.co.uk/index.php">Home</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/about-us.php">About Us</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/news.php">News</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/dealers.php">Dealers</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/products.php">Products</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/shop">Buy Online</a>
            </li>
            <li>
                <a href="http://www.cosworth-europe.co.uk/contactus.php">Contact</a>
            </li>
        </ul>
    </nav>

</div>
</header>

获取header.php的代码

<?php include($_SERVER['DOCUMENT_ROOT']."/header.php"); ?>

FTP 文件夹结构

【问题讨论】:

  • 问题是您使用绝对 URL。你不应该,没有理由这样做。如果您无法更改(无论如何),那么您必须寻找解决方法,但这始终是第二选择:您可以修改本地名称解析,以将这些 URL 中的主机名解析为本地 IP 地址。也许您还必须在本地 http 服务器中定义一个匹配的主机。
  • 改用前导/
  • @arkascha 感谢您的回答,相对 URL 工作正常,但前提是网页与我的 header.php 位于同一目录中。如果我在其中有另一个目录,其中包含网页,那么他们会在需要查找 ../index.php 时查找 /index.php。我能做什么?
  • @s.poole 如果有帮助,请查看我的回答

标签: php url absolute


【解决方案1】:

您应该使用相对 url,建议使用它的可移植性。

</hgroup>
    <nav id="main-nav" class="two thirds column omega">
        <ul>
            <li>
                <a href="/index.php">Home</a>
            </li>
            <li>
                <a href="/about-us.php">About Us</a>
            </li>
            <li>
                <a href="/news.php">News</a>
            </li>
            <li>
                <a href="/dealers.php">Dealers</a>
            </li>
            <li>
                <a href="/products.php">Products</a>
            </li>
            <li>
                <a href="/shop">Buy Online</a>
            </li>
            <li>
                <a href="/contactus.php">Contact</a>
            </li>
        </ul>
    </nav>

</div>
</header>

【讨论】:

  • 上面的相对 URL 工作正常,但它们不适用于我的 header.php 的其他目录中的网页 - 有意义吗?
  • 在 URL 后面添加 /,它总是指向根目录
  • 我从来没有为这么简单的事情感到如此沮丧过,我成功了!谢谢
【解决方案2】:

如果您想让它在不编辑源文件的情况下工作

实际上,您不应该使用绝对 URL,但您仍然可以使其在本地工作,您需要在 hosts 文件中进行一些小改动。我不知道您当前使用的是哪个操作系统,因此您可以像这样编辑主机:

Ubuntu:

在终端中输入

sudo gedit /etc/hosts

您需要输入密码。 在打开的文件中将这一行添加到末尾:

127.0.0.1   www.cosworth-europe.co.uk

Windows:

c:\windows\system32\drivers\etc\hosts

使用管理权限在记事本中打开它并添加以上行。现在本地网站的工作方式与您的实时网站类似。

[但如果您想访问实时网站 (www.cosworth-europe.co.uk),请确保删除这些行]

查看此pictorial 表示。在这种方法中,您现在不需要更改文件。但强烈建议使用相对 URL 以获得出色的可移植性!

【讨论】:

  • 嗯似乎不起作用?我编辑了文件并将127.0.0.1 localhost替换为127.0.0.1 www.cosworth-europe.co.uk,在XAMPP本地运行站点仍然没有变化,我做对了吗?
  • 所以你应该在 URL 中输入 www.cosworth-europe.co.uk 而不是 localhost。顺便说一句,你为什么要替换 localhost,只需再添加一行
  • 对不起,我确定您的答案可以正常工作,但这对我来说可能太高级了。我想我只需要离开它:-(
  • 那么你应该改变你的代码,这是唯一的方法! &lt;a href="index.php"&gt;Home&lt;/a&gt;
  • 我完全同意,但如果我的网页位于不同的目录中,我将无法使用相对 URL:@
【解决方案3】:

你不应该使用绝对 URL,如果你有时不得不改变一些东西,你会弄得一团糟。

您应该使用函数或相对 URL。

函数示例:

function getURL() {
    //get THIS ($develop) value from a config file
    $develop = true;

    return ( $develop ) ? "localhost" : "http://".$_SERVER["HTTP_HOST"];
}

<a href="<?php echo getURL(); ?>/index.php">Home</a>

快速帮助: 只需像这样编辑您的主机文件:

127.0.0.1   www.cosworth-europe.co.uk

相对 URL(在本例中相对于文档根目录)

<ul>
    <li>
        <a href="/index.php">Home</a>
    </li>
    <li>
        <a href="/about-us.php">About Us</a>
    </li>
    <li>
        <a href="/news.php">News</a>
    </li>
</ul>

【讨论】:

  • 感谢您的回答,上面的相对 URL 可以正常工作,但前提是网页与我的 header.php 位于同一目录中。如果我在其中有另一个目录,其中包含网页,那么他们会在需要查找 ../index.php 时查找 /index.php。我能做什么?
  • 使用/,您总是引用您的域,例如example.org/localhost/,所以如果header.php 在另一个文件夹中没有问题,但您必须调整链接.即你想调用localhost/somefolder/index,php你的href必须是/somefolder/index.php但是如果你在域中的根文件夹在www.cosworth-europe.co.uk/并且在本地它在localhost/cosworth/上,这对这两种情况都不起作用
  • 但是如何调整链接呢?这只会阻止我的标题出现在它已经工作的网页上!好混乱:@
【解决方案4】:

你可以做两件事。

首先 -

<a href="/index.php">Home</a> // The relative urls

第二个-

用主机名定义一个变量 -

$host = ($_SERVER['HTTP_HOST'] === 'www.cosworth-europe.co.uk') ? 'http://www.cosworth-europe.co.uk' : 'http://localhost';

<a href="<?php echo $host;?>/index.php">Home</a>

【讨论】:

    【解决方案5】:

    始终使用相对 URL,至少对于域而言。

    <link rel="stylesheet" href="/css/style.css" />
    

    如果您真的想使用绝对 URL,请将变量设置为 $homeroot 并以这种方式使用:

    <link rel="stylesheet" href="<?php echo $homeroot; ?>/css/style.css" />
    

    你可以这样声明:

    $homeroot = "http://my.example.com";
    

    如果你还想让它变得更好,你可以这样使用:

    $homeroot = $_SERVER["HTTP_HOST"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2015-01-18
      • 2011-02-14
      • 2019-05-24
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多