【问题标题】:A way to avoid Apache Alias path to include HTML resources like CSS一种避免 Apache Alias 路径包含 HTML 资源(如 CSS)的方法
【发布时间】:2014-10-27 03:08:30
【问题描述】:

这里有一个问题,因为我目前的解决方案对于以下问题并不真正让我满意:

我有一个自己的带有 MVC 模式的 PHP 框架正在开发中。而且我的路由器运行良好,但我有一个问题我找不到解决方案。

我将每个传入请求路由到位于我的框架的基本路径中的 index.php 文件。当然,在包含 css 时使用相对路径是没有问题的,例如:

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

这在浏览器中完美运行。当然,我在 URL 中输入什么并不重要,因为每个请求都会按上述方式重定向到索引,以使合理的路由成为可能。

但是,当我的 url 包含多个看起来像子文件夹的斜杠时,例如:“/manual/details/1_2”然后我得到一个正常的路由过程,但浏览器找不到 css 文件,除非我添加“../”我的网址中的每个“/”都向后映射到我的基本路径。

例如,对于上面的 URL,这将起作用:

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

我目前的解决方案:

我在我的 Routing 类中编写了一个 PHP 函数,用于确定所需的“../”模式数量,并且我总是在实现资源之前强制转换函数以构建确切的 任何时候的路径。

例子:

<link rel="stylesheet" type="text/css" href="<?=Router::getInstance()->getSubdirectoryPrefix()?>style/include/css/style.css" />

不用说,这很不方便,如果您忘记放置该功能,也会很糟糕。如果您的路线发生变化,或者您忘记了您在子目录中,您会想知道为什么找不到您的资源。

我也知道在我的 Apache 虚拟主机配置中放置一个别名,例如 Alias /public style/,但我想找到另一个 - 项目和 PHP 内部方式,而不会出现不方便的废话,例如将别名函数全部粘贴到无需设置虚拟主机选项,因此框架可以保持轻量级,并且不需要任何讨厌的外部选项,例如修改虚拟主机。

我很想听听您的解决方案,最好是 .htacces - 哦,通过讨论,我也将我的 .htaccess 代码留在这里:

RewriteEngine On

Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]

提前感谢您的帮助~

【问题讨论】:

    标签: php html apache mod-rewrite


    【解决方案1】:

    您的 html 链接(css、javascript、图像等)必须使用 absolute 路径而不是 relative 路径。

    例如:

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

    前导斜杠(style之前)表示从文档根文件夹开始,然后进入style文件夹,依此类推...(如果不在根文件夹中,您可能还有另一个前缀目录)

    您遇到了一些问题,因为您的某些规则可以创建虚拟目录(例如:http://domain.com/some/directory/subdirectory/etc/)。

    另外,在您的 htaccess 中,使用前导斜杠(或 RewriteBase)也无妨

    Options -Indexes
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* /index.php [L]
    

    或(两者相同)

    Options -Indexes
    
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php [L]
    

    【讨论】:

    • 哈哈,这太容易了...非常感谢,这就像一个魅力!
    猜你喜欢
    • 2016-02-04
    • 2016-09-10
    • 2015-03-21
    • 2015-09-03
    • 2016-11-02
    • 2011-06-17
    • 2012-04-11
    • 2015-09-14
    相关资源
    最近更新 更多