题
我正在开发一个PHP网站使用的url路由。我想该网站目录独立的,因此,它可以从移动 http://site.example.com/ 要 http://example.com/site/ 没有必要改变每一个路径在HTML。问题来了,当我将链接到文件,这些文件没有受到路由选择,就像css文件、图像等。
例如,让我们假定认为的行动 index
控制器 welcome
包含的图像 img/banner.jpg
.如果页面被请求,与url http://site.example.com/welcome, ,浏览器将要求作为图像 http://site.example.com/img/banner.jpg, ,这是完美的罚款。但是,如果页面被请求,与url http://site.example.com/welcome/index, ,浏览器将认为 welcome
是一个目录并将尝试获取的图像 http://site.example.com/welcome/img/banner.jpg, ,这显然是错误的。
我已经考虑一些选择,但他们似乎都不完美的对我说:
使用网址的改写向请求(*.css|*.js|...)或(css/*|js/*|...)在正确的道路。
的问题:每一扩展将有名的改写规则。如果有人想增加一个新的文件类型(例如一个mp3文件),它不会改写。
预先准备的基本路径到每个相对路径与php功能。例如:
<img src="<?php echo url::base(); ?>img/banner.jpg" />
的问题:看起来很凌乱; css-和 js-文件包含的路径必须处理的PHP.
那么,你如何保持一个网站目录独立?是否有更好的/清洁的方式比我想到了?
解决方案
你可以把头
<base href="<?php echo url::base(); ?>" />
这将意味着浏览器将请求任何非绝对的网址相对于这条道路。 但是我不知道该怎么这会影响的网址嵌入CSS文件等。 这并不影响的路径中的定义CSS文件。(谢谢mooware)
其他提示
的 <base>
事情会的工作,但你需要记住它会影响你的 <a>
标签。考虑这个例子。:
<!-- 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 function呼吁创建的链接,这不是一个问题,因为你可以确保它吐出来的绝对的网址。但如果你(或者你的设计师)的手码的 <a>
标签,然后你把它们用同样的问题再一次,仅仅是现在 <a>
而不是的 <img>
.
编辑:我应该加入上述段落是假设你服务的图像从一个不同主机名称喜欢我们这样做。如果你不那么显然这不是一个问题。
也许是我漏掉些什么,但你就不能做什么,我(而且我想其他人)做/es?即把所有你的图像,css,javascript,等于一个共同的目录即:
/inc/images/
/inc/css/
/inc/javascript/
etc
然后参与的基础-相对的网址,即:
<img src="/inc/images/foo.jpg" />
etc
?