【问题标题】:Redirect all media requests (css, js and images) with .htaccess使用 .htaccess 重定向所有媒体请求(css、js 和图像)
【发布时间】:2016-03-31 13:45:40
【问题描述】:

我正在构建一个 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,只需在该public中设置html文件夹...

HTACCESS 文件:

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

【问题讨论】:

  • 这是一个客户端问题,因此应该在 HTML、CSS 和 JS 中解决客户端问题,而不是在 .htaccess 中进行重定向。 (即使您确实设法在 .httaccess 中解决它,它也将不必要地低效。)正如您所提到的,它应该通过使用 head 部分中的 base 元素或使用 root-relative 来解决(以斜杠开头)或客户端代码中的绝对 URL(即不是相对的)。使用相对 URL 最终是问题所在。相对于什么?

标签: php regex .htaccess


【解决方案1】:

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

&lt;base&gt; 标签只是改变了这个动作的引用点,它不采用当前 URL 的基本路径,而是采用 base 中给出的值。这需要是绝对的。这就是事情通常变得更加复杂的地方:尽量省略base

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

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

改为尝试&lt;a href='#' onclick='somejavafunction();return false;' ...,这将阻止href 被执行。

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

【讨论】:

    【解决方案2】:

    你写在你的问题中:

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

    这听起来有点像这种“解决方案”实际上给您的应用程序带来了问题。听起来你也收到了一些你无法完全应对其影响的东西。

    我通常会考虑在 Web 应用程序的超文本输入/输出层的设计中使用 &lt;base&gt; 元素,这是不好的做法。因此,无论谁建议您,要么不知道,要么故意这样做。如果由于无法保留文档 URI(例如,您正在镜像或归档超文本文档)而遇到解决问题,它通常只能是具体文档上的补丁。 Web 应用程序通常不会出现这种情况,因为应用程序配置了 base-URI,因此可以在呈现 HTML 输出时将其用作属性。我所知道的所有过去使用过&lt;base&gt; 元素的应用程序都不再使用它。

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

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 2015-04-10
      • 1970-01-01
      • 2015-12-29
      • 2016-11-30
      • 2012-11-16
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多