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

问题描述:

在我的.htaccess文件中,我将所有请求重定向到我的public/index.php文件。链接到静态资产,自定义MVC应用程序(PHP)

从那里我做路由,根据URL给出的参数。

问题是我的css文件被包含在view,其中说href="css/app.css"。当指定像http://hostname/public/something这样的请求时,所有工作都很好,但是如果我更深入一个目录,比如说例如: http://hostname/public/something/else,我的css会中断。

我该如何解决这个问题?

那是因为你正在使用相对路径,而不是为所有的HTML链接(图像,JavaScript,CSS,HREF链接)绝对路径。

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

比方说,你有CSS的链接,这样

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

对于一些例子,这里是路径解析

  • /public/something - >/public/css/style.cssGOOD
  • /public/something/else - >/public/something/css/style.cssWRONG

为了避免这种行为,使用绝对路径

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

或者,如果你不想改变你所有的HTML链接,您可以后<head> HTML添加此行标签

<base href="/public/"> 
+0

感谢您指出我在正确的方向,有什么困惑我,就是我试着用'/公/'并没有工作,但真正的问题是,当我在本地开发时,我从'userdir'提供了这个服务,所以最后我必须做的是将路径指定为'/〜myusername/path/to/project /公/ CSS/app.css'。 – branquito 2014-09-11 13:12:43

+0

在我的回答中,我使用了'/ public /',因为那是你在你的问题中写的。但它可能是别的,就像你说的。如果你很容易理解,你必须使用你的项目的路径。例如,在本地,你可以将项目放在'/ xxx/yyy/my/project /'中,那么你将拥有'/ xxx/yyy/my/project /'作为绝对路径,因为你可以通过'http :// localhost/xxx/yyy/my/project /' – 2014-09-11 13:15:46

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

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

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

做的最有用的东西通常是创建一个小的辅助函数:

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

根据什么那种你可以使用模板系统,这可能看起来像你一样的:

{{ css 'app.css' }} 
+0

我没有使用任何模板系统,这是简单的MVC,我从头开始,因为这是一个小项目。我会尽力实现像你所说的。 – branquito 2014-09-11 13:15:38

尝试增加一个全局变量或常量或某些功能,以您申请PHP命名为:$ site_root,这是您的根目录的路径。例如笨这是否与url_helper,看到这一点:https://ellislab.com/codeigniter/user-guide/helpers/url_helper.html
你的CSS文件之前,然后添加$ siteRoot

... href="<?php echo site_url() ?>/link/to/your/file.css" ...