URL 重定向未从正确的相对源加载资源

Posted

技术标签:

【中文标题】URL 重定向未从正确的相对源加载资源【英文标题】:URL redirect not loading resources from correct relative source 【发布时间】:2018-10-20 01:29:10 【问题描述】:

我有一堆要重定向到单个页面的 URL。在我的 .htaccess 文件中,我有...

FallbackResource home.php

所以任何链接都会重定向到该页面,我有一个 PHP 脚本,它获取 URL 并从 mysql 表加载页面。我构建了一个没有脚本/样式资源的测试页面,一切正常。但是,当我添加样式和 javascript 时,出现以下错误:

main.js:1 Uncaught SyntaxError: Unexpected token <

此错误仅出现在其中包含“/”的 URL 中。

所以对于 url localhost/home.php 显示我的页面,因为它应该 没有内容。 网址localhost/tax-information 将显示带有内容的home.php 加载了应有的“税务信息”。 url localhost/tax-information/school-authority-contact-information 将显示 home.php 的内容 已加载“税务信息/学校权威联系信息”,但会引发错误并因此 不呈现样式表或有任何可用的 javascript。

错误如下所示:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost/toh/tax-information/css/style.css".
Uncaught SyntaxError: Unexpected token <

我知道这是因为正在加载的资源在第一个字符中有一个“&lt;”,但这对于像 css 这样的资源没有意义。

所以我检查了我的网络选项卡以查看正在加载哪些资源,并且它正在将每个资源加载到错误的路径中。

&lt;style src="css/style.css&gt; 最终加载 localhost/toh/tax-information/css/style.css 而不是 localhost/css/style.css。打开该文件后,它不是 CSS,而是请求页面的完整 HTML(因此出现“Unexpected token &lt;”错误)。当您在网络选项卡中单击它们时,甚至图片最终都会以某种方式变为 HTML。通过 cdn 加载的任何内容(因此任何完整的 URL 资源)都可以正常加载。

这只发生在具有辅助路径(如 (localhost/this/that))但为任何只是主路径 (localhost/this) 的任何内容加载正确资源的 URL 上。

我可以看到问题是由 FallbackResource 和使用相对路径加载资源引起的。如果我将资源的路径更改为绝对路径(例如 css/style.css -> http://localhost/css/style.css),那么它可以正常工作,没有任何问题。将所有内容重新编码为绝对路径将解决我的问题,但不是一个实际的解决方案。这让我相信我的问题是我的 .htaccess。有没有另一种方法可以将所有 url 路径重定向到单个页面并让它们通过相对路径加载资源?

【问题讨论】:

任何不以 / 开头的 src 或 href 都是相对于当前位置的,所以如果你想加载 /css/style.css,你应该提出这个要求。 如果您在 htaccess 中执行 301 重定向,请记住浏览器会保留此信息,直到您删除缓存 【参考方案1】:

您似乎在cssjs 链接中使用了相对路径,这就是为什么您的相对资源从错误的目的地而不是正确的目的地加载的原因。

要解决此问题,您可以在链接中使用绝对路径,即/style.css,或在网页标题中使用Base 标记。在&lt;head&gt;&lt;/head&gt; 之间添加以下内容:

<base href="/">

上面的基本标签告诉网络服务器从/(主目录)加载相关资源。因此,如果您的 css 文件位于根目录的 /style 文件夹中,您的 Web 服务器将尝试从真实路径 /style/file.css 加载它,而不是查看请求的 uri。

另见:

Seo Friendly Url css img js not working

【讨论】:

【参考方案2】:

您使用的是相对路径而不是绝对路径。

当引用文件 src=“css/css.css” 时,它加载的样式表是相对于它被引用的文件的位置。

要加载站点根目录的文件,请使用:src=“/css/css.css(路径前带有正斜杠)。

【讨论】:

以上是关于URL 重定向未从正确的相对源加载资源的主要内容,如果未能解决你的问题,请参考以下文章

302 重定向到相对 URL 是有效的还是无效的?

[在Swift中使用重定向URL的ATS策略问题

301 重定向与相对 = 规范

如何使用重定向 url 加载网络图像?

nginx过滤资源文件(js/css/image)重定向问题

重定向到 JavaScript 中的相对 URL