我有一堆要重定向到单个页面的 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
按应有的方式加载“税务信息”。 - 网址
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 <
我知道这是因为正在加载的资源有一个'<
' 在第一个字符中,但这对于像 css 这样的资源没有意义。
所以我检查了我的网络选项卡以查看正在加载哪些资源,它正在以错误的路径加载所有资源。
<style src="css/style.css>
最终加载 localhost/toh/tax-information/css/style.css 而不是 localhost/css/style.css。打开该文件后,它不是 CSS,而是所请求页面的完整 HTML(因此出现“Unexpected token <
”错误)。当您在网络选项卡中单击图片时,甚至图片最终也会以某种方式变成 HTML。通过 cdn 加载的任何内容(因此任何完整的 URL 资源)都可以正常加载。
这仅发生在具有次要路径(如(localhost/this/that))但为仅是主要路径(localhost/this)的任何内容加载正确资源的 URL 上。
我可以看出问题是由 FallbackResource 和使用相对路径加载资源以某种方式引起的。如果我将资源的路径更改为绝对路径(例如 css/style.css -> http://localhost/css/style.css ),那么它可以正常工作,没有任何问题。将所有内容重新编码为绝对路径将解决我的问题,但这不是一个实用的解决方案。这让我相信我的问题是我的 .htaccess。有没有另一种方法可以将所有 url 路径重定向到单个页面并让它们通过相对路径加载资源?
最佳答案
您似乎在 css
中使用了相对路径和 js
链接,这就是为什么您的相关资源从错误的目的地而不是正确的目的地加载的原因。
要解决此问题,您可以在链接中使用绝对路径,即 /style.css
或使用 Base
网页标题中的标记。在<head>
之间和 </head>
添加以下内容:
<base href="/">
上面的base标签告诉webserver从/
加载相关资源(主目录)。所以如果你的 css
文件位于 /style
您的 Web 服务器将尝试从真实路径加载它的根文件夹 /style/file.css
而不是查看请求的 uri。
另请参阅:
关于javascript - URL 重定向未从正确的相对来源加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50261675/