【问题标题】:Absolute URLs that will work on local (MAMP) and live server可在本地 (MAMP) 和实时服务器上运行的绝对 URL
【发布时间】:2014-09-04 09:41:45
【问题描述】:

试图找出一种方法,使我可以在本地计算机上开发我的网站版本,然后将文件上传到实时站点。问题是,我希望本地站点完全依赖于自身,并且对于 css 链接、包含等需要链接到本地​​文件夹。

我使用了一个名为 init.php 的文件,它位于 web 文件夹的根目录中,并且包含在每个页面中。在这个初始化中,我包含了所有样式表、jquery 和其他包含。

如果我的网站上没有任何子文件夹,我会简单地使用每个页面上包含的这个 init.php,然后简单地执行例如css/main.css 并包含 'includes/header.php' 等。

问题是我的网站中有文件夹,但仍然希望只使用根目录中的一个 init.php 文件。但是,我需要包含此文件并链接到同样位于同一位置的 css 文件等。

文件夹结构为:

root
    init.php
    databaseconn.php
    /css/
        main.css
    /settings/
        user_profile.php

如果我在 user_profile.php 页面中包含 init.php 文件,则指向其他文件的链接将不起作用。目前我通过表示双句点(../)将 init.php 包含到 user_profile.php 页面中

问题是我如何才能始终使 init.php 文件中链接的文件始终链接到同一个正确位置,无论我在哪个文件夹中,而且当我将网站文件移动到我的现场时也不会受到影响主持人?

我已经尝试过 DIR 和文档根目录等,但是当按如下方式使用时:

<?php define( 'BASE_PATH', __DIR__.'/' ); ?>
<link rel="stylesheet" type="text/css" href="<?php echo BASE_PATH; ?>css/main.css">

这个(在 MAMP 上)给了我这个 URL:

/Applications/MAMP/htdocs/website/css/main.css

这当然行不通。

我怎样才能正确地做到这一点?我不想强制使用 http: 部分,以防我将来获得 SLL。

任何帮助都会很棒!

【问题讨论】:

    标签: php html url relative-path absolute-path


    【解决方案1】:

    您可以为此使用基本 href 标记。

    示例代码:

    <?php
      $baseHref = ($isDevelopment ? '//localhost/site/' : '//www.site.com/');
    ?>
    <html>
      <head>
        <base href="<?php echo $baseHref; ?>" />
        <link rel="stylesheet" type="text/css" href="css/main.css" />
      </head>
    

    编辑:当然,您必须在某个地方的 config / init 中定义您是在 dev 还是 prod 服务器中。

    【讨论】:

    • 谢谢,很快就会测试。我目前对数据库连接做类似的事情。我使用不同的连接,因为在本地主机上工作时我仍然使用实时数据库信息。我会看看我是否可以将切换与之集成。
    • 刚刚对此进行了测试,并且对链接标签等工作正常。但是 php 包含什么呢?
    【解决方案2】:

    我会选择$_SERVER['SERVER_NAME'],它会捕获您的域名(在协议和文件夹路径之间)。然后使用:

    function isSecure() {
      return
        (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
        || $_SERVER['SERVER_PORT'] == 443;
    }
    

    那个函数来自这里:

    How to find out if you're using HTTPS without $_SERVER['HTTPS']

    如果您的服务器不使用 443 作为 SSL 端口,则需要更改该值。

    那么:

    if (isSecure()) {
        $basePath = 'https//' . $_SERVER['SERVER_NAME'];
    } else {
        $basePath = 'http//' . $_SERVER['SERVER_NAME'];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多