链接到静态资产,自定义MVC应用程序(PHP)

时间:2014-09-11 13:01:13

标签: css .htaccess assets

在我的.htaccess文件中,我将所有请求重定向到我的public/index.php文件。

从那里开始我根据URL中给出的参数进行路由。

问题在于我的css文件包含在view中,即href="css/app.css"。在指定http://hostname/public/something之类的请求时,一切正常,但如果我更深入一个目录,例如: http://hostname/public/something/else,我的css休息。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

那是因为您使用相对路径代替绝对路径来处理所有html链接(图片,javascript,css,href链接) 。

实际上,您的规则可以创建虚拟目录。

让我们说你有这样的css链接

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

对于某些示例,这是路径解析

  • /public/something - &gt; /public/css/style.css
  • /public/something/else - &gt; /public/something/css/style.css 错误

要避免此行为,请使用绝对路径

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

或者,如果您不想更改所有html链接,可以在<head> html标记

之后添加此行
<base href="/public/">

答案 1 :(得分:1)

使用href="/public/css/app.css"等绝对链接。

如果/public部分是可变的,例如在开发机器和生产服务器之间,然后使用变量或常量:

<?php echo ROOT_URL . '/css/app.css'; ?>

最有用的事情通常是为此创建一个小辅助函数:

<?php echo css('app.css'); ?>

根据您使用的模板系统类型,这可能看起来很不错:

{{ css 'app.css' }}

答案 2 :(得分:1)

尝试向您的PHP应用程序添加全局变量或常量或一些函数:$ site_root,这是您的根目录的路径。例如CodeIgniter使用url_helper执行此操作,请参阅:https://ellislab.com/codeigniter/user-guide/helpers/url_helper.html
然后在css文件

之前添加$ siteRoot
... href="<?php echo site_url() ?>/link/to/your/file.css" ...