【问题标题】:How to keep a website with url routing directory independent如何保持具有 url 路由目录独立的网站
【发布时间】:2008-11-09 20:30:35
【问题描述】:

我正在开发一个使用 url 路由的 PHP 网站。我希望该站点独立于目录,以便可以将其从 http://site.example.com/ 移动到 http://example.com/site/ 而无需更改 HTML 中的每个路径。当我链接到不受路由影响的文件时,问题就出现了,比如 css 文件、图像等。

例如,假设控制器welcome 的操作index 的视图包含图像img/banner.jpg。如果页面是使用 url http://site.example.com/welcome 请求的,浏览器将请求图像为http://site.example.com/img/banner.jpg,这非常好。但是如果页面是用http://site.example.com/welcome/index的url请求的,浏览器会认为welcome是一个目录,会尝试获取图片为http://site.example.com/welcome/img/banner.jpg,这显然是错误的。

我已经考虑了一些选项,但它们对我来说似乎都不完美:

  • 使用 url 重写重定向来自 (*.css|*.js|...) 或 (css/*| 的请求js/*|...) 到正确的路径。

    问题:每个扩展都必须在重写规则中命名。如果有人要添加新的文件类型(例如 mp3 文件),它不会被重写。

  • 使用 php 函数为每个相对路径添加基本路径。例如:
    <img src="<?php echo url::base(); ?>img/banner.jpg" />

    问题:看起来很乱; css- 和 js- 包含路径的文件必须由 PHP 处理。

那么,如何保持网站目录的独立性?有没有比我想出的更好/更清洁的方法?

【问题讨论】:

    标签: php url-routing


    【解决方案1】:

    你可以放在头上

    <base href="<?php echo url::base(); ?>" /> 
    

    这意味着浏览器将请求与该路径相关的任何非绝对 URL。 但是我不确定这会如何影响嵌入在 CSS 文件等中的 URL。 这不会影响 CSS 文件中定义的路径。 (感谢 mooware)

    【讨论】:

    • 根据 CSS 规范,CSS 文件中的 URL 是相对于定义它们的文件的路径进行解析的。因此 base-tag 根本不会影响它们。我试过了,确实是这样。
    【解决方案2】:

    &lt;base&gt; 会起作用,但您需要记住它也会影响您的&lt;a&gt; 标签。考虑这个例子。:

    <!-- this page is http://oursite.com/index.html -->
    <html>
     <head>
        <base href="http://static.oursite.com/" />
     </head>
     <body>
        <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" />
        <a href="/login">this links to http://static.oursite.com/login which is not what we wanted.  we wanted http://oursite.com/login</a>
     </body>
    </html>
    

    如果您使用 PHP 函数调用来创建您的链接,这不会是一个问题,因为您可以确保它吐出绝对 URL。但是,如果您(或您的设计师)手动编码 &lt;a&gt; 标签,那么您又会遇到同样的问题,只是现在使用 &lt;a&gt; 而不是 &lt;img&gt;。

    编辑:我应该添加上面的段落,假设您像我们一样从不同的主机名提供图像。如果你不这样做,那么显然这不会是一个问题。

    【讨论】:

    • 在将子域指向新子目录时非常有用 - 我使用了您的 &lt;base href= ... 并让我免于自定义 .js 和 .css 路径并编写 php 重定向。
    【解决方案3】:

    tomhaigh 有一个很好的观点,值得进一步研究。

    根据MSDN,base 标签适用于所有外部资源,包括样式表、图像等。

    【讨论】:

      【解决方案4】:

      也许我遗漏了什么,但你不能做我(我认为其他人)做的事吗?即将你所有的图片、css、javascripts等放在一个公共目录中,即:

      /inc/images/
      /inc/css/
      /inc/javascript/
      etc
      

      然后使用基本相对 URL 引用它们,即:

      <img src="/inc/images/foo.jpg" />
      etc
      

      ?

      【讨论】:

        猜你喜欢
        • 2017-05-01
        • 2016-04-16
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2014-11-21
        • 2011-04-20
        • 1970-01-01
        相关资源
        最近更新 更多