从非根位置引用时,我的资产所需的绝对路径

时间:2011-12-26 11:34:35

标签: php .htaccess

我一直在寻找我正在努力解决的问题的答案,但似乎无法找到明确的解决方案。

我正在使用WAMP服务器。当我创建一个新网站时,我在WAMP根目录中创建了一个子目录:C:\wamp\www,例如C:\wamp\www\somesite.com.au。对于每个网站构建,我总是有一个includes目录:C:\wamp\www\somesite.com.au\includes,其中包含每个网站页面所需的所有全局代码段,例如包含HTML头内容的include:

<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS -->
<link rel="stylesheet" href="css/sitename.css">
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie.css"><![endif]-->
<!-- All JavaScript at the bottom, except for... -->
<!--[if lt IE 9]><script src="js/libs/html5.js"></script><![endif]-->
<script src="js/libs/respond.js"></script>

问题是当我从子目录中的页面调用包含文件时,例如使用PHP的C:\wamp\www\somesite.com.au\profile\foo.php包括:<?php include("../includes/template/html-head.php"); ?>其中包含资产的任何路径,包括:找不到<link rel="stylesheet" href="css/style.css">,因为路径相对于includes目录。

有没有办法使用PHP或.htaccess使我的includes目录中的资产的任何相对路径始终解析,无论我从哪里调用包含文件?我不想在上传到制作时修改任何代码,也不想使用HTML <base>元素。

请注意:我是一名前端开发人员,因此我的PHP / .htaccess技能非常基础。

干杯

3 个答案:

答案 0 :(得分:0)

我认为您正在寻找dirname函数和__FILE__常量

使用这两项你可以随时知道你在哪里

$currentScriptDir = dirname(__FILE__);

注意:如果你在PHP 5.3&gt; =下面有一个__DIR__,它直接就是脚本所在的目录

答案 1 :(得分:0)

您应该通过绝对链接到页面中的每个资源:

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

当然,您应该为要放入页面的每个图像执行此操作。只需先定义一个ABSPATH常量,然后在应用程序周围使用它。但是如果你的图像是在样式表文件中定义的,你不需要将它们定义为绝对的,只需定义我在这里提到的样式表文件的绝对路径。

<强> ABSPATH: 通常,具有用户友好URL的Web应用程序应使用绝对路径指向其数据。例如,我习惯制作一个.htaccess文件,并将每次调用返回到我的第一页,即index.php,然后我将获得REQUEST_URI并将路径分成碎片并确定哪个部分我应该向我的用户展示。这是ABSPATH的想法,我在我的核心类的构造方法中定义它。可以通过工作项目中的每个脚本访问它。我认为这是将数据传输到您页面的唯一方法。

答案 2 :(得分:0)

这是我最终要做的工作:

  1. 在根目录中创建了一个config.php文件,并在每个页面的顶部链接到该文件:

  2. 以下是我的config.php文件的内容:

    <?php
    
    /* Absolute paths to the site root */
    define( 'ABSPATH', dirname(__FILE__) . '/' );
    $path = '/Sitenamehere';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    

    我上传到生产服务器时必须更新$path值。我宁愿不这样做,但不确定如何保持它的普及性?

    1. 然后,对于我的包含文件中的资产的任何链接,我链接到它们:

      HREF = “/ CSS / style.css中” &gt;“中

    2. 一切正常,但不确定我是如何设置的最好方法?还有哪个更好用于调用我的包括:

      <?php include (ABSPATH . "/includes/global/html-element.php"); ?>
      

      <?php include "includes/global/html-element.php" ?>
      

      主要围绕页面表现。

      干杯