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


Redirect all media requests (css, js and images) with .htaccess

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

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

所有请求都指向一个子文件夹,例如 PUBLIC,只需要在该公共中设置 html 文件夹......

HTACCESS 文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
html文件中

的相对URL abc/def/file.js会导致浏览器(!!(在其前面添加当前路径并发出请求。假设您正在浏览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设置的混乱线,不如从清晰的目录结构和相对路径开始。在适当的环境中,您不需要其中任何一个。

你在问题中写道:

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

这听起来有点像这种"解决方案"实际上会给您的应用程序带来问题。听起来你收到的东西你无法完全处理它的影响。

我通常会考虑在 Web 应用程序不良实践的超文本输入/输出层的设计中使用 <base> 元素。所以无论谁建议你,要么不知道,要么故意这样做。它通常只能是具体文档上的补丁,如果您遇到分辨率问题,因为您无法保留文档 URI(例如,您正在镜像或存档超文本文档(。对于 Web 应用程序来说,这种情况通常不应该是这种情况,因为应用程序配置了基本 URI,因此可以在呈现 HTML 输出时将其用作属性。我所知道的所有过去使用 <base> 元素的应用程序都放弃了它的使用。

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