使用.htaccess重定向所有媒体请求(css,js和图像)

时间:2015-12-25 15:50:33

标签: php regex .htaccess

我正在构建一个MVC应用程序,我在html中遇到了 css文件,js和图像的路径问题...我得到了一个使用{{1}的解决方案}标签来定义所有html文件所遵循的路径,例如:<base>,只有来回安装javascript插件时遇到一些问题,因为当我放置时,例如,<base href="http://localhost/mvc/>点击而不是做任何操作,链接带我到使用href="#"标记定义的URL将是<base>,我想知道如何将这些文件的所有“请求”重定向到子文件夹,例如:

http://localhost/mvc/#

所有请求都会导致子文件夹,例如 PUBLIC ,只需要在公开中设置html文件夹...

HTACCESS文件:

<link rel="stylesheet" href="main.css">
<img src="images/img2.jpg" />

2 个答案:

答案 0 :(得分:2)

html文件中的abc/def/file.js之类的相对URL会导致浏览器(!!)在其前面添加当前路径并发出请求。假设您正在浏览http://domain.com/folder/file.html,结果将是http://domain.com/folder/abc/def/file.js

<base>标记只是改变了这个动作的引用点,不是取当前URL的基本路径,而是取得base中给出的值。这需要绝对。这就是事情变得越来越复杂的地方:一般都要省略base

#不会改变任何东西,因为它是(这里缺少的)片段的开始。 http://doamin.com/file.jshttp://doamin.com/file.js#实际上与#应该仅由浏览器解释而不是服务器相同。

此外,如果您的MVC实现正在执行<a href='#' onclick='somejsfunction();' ...并且这不会返回false,则会重新加载页面,这会让您的视图混乱。

相反,请尝试<a href='#' onclick='somejavafunction();return false;' ...,这会阻止href被执行。

建议:不要创建base.htaccess设置的干草线,而是从一个清晰的目录结构和相对路径到处开始。在适当的环境中,您不需要任何这些。

答案 1 :(得分:1)

你写下你的问题:

  

我获得了一个使用<base>标记来定义所有html文件所遵循的路径的解决方案,

听起来有点像这种&#34;解决方案&#34;实际上,您的应用程序引入了问题。听起来你也收到了一些你无法完全解决其影响的事情。

我通常会考虑在Web应用程序不良做法的超文本输入/输出层的设计中使用<base>元素。所以无论谁建议你要么没有通过意图知道或做到这一点。它通常只能是具体文档的补丁,如果您有解决问题,因为您无法保留文档URI(例如,您正在镜像或存档超文本文档)。对于Web应用程序通常不应该这样,因为应用程序配置了base-URI,因此在呈现HTML输出时可以将其用作属性。我所知道的所有过去曾使用<base>元素的应用程序已经放弃了它的使用。

因此,我能热心给出的最佳答案是重新考虑在应用程序中使用<base>元素并将其删除。在第一种情况下,它会引起你的问题。