找不到JavaScript和CSS文件是与您的URL路径相关的客户端/浏览器问题,这不是应该解决的问题.htaccess
(至少在这种情况下不应该解决)-尽管这是因为您正在更改此设置.htaccess
您遇到此问题的URL路径(在中)。
正如@closetnoc在注释中建议的那样,此问题是由在HTML中使用相对URL引起的。相对于什么?请记住,是用户代理/浏览器来解析HTML中的相对URL,而不是服务器。因此,您需要修复URL。不.htaccess
。
例如,如果您使用格式相对的 URL href="styles.css"
(请注意,没有斜杠前缀)引用CSS文件,并且当前使用的是URL,example.com/view.php?id=15
则浏览器自然会解析您的CSS URL和请求example.com/styles.css
(在文档根目录中)。但是,如果您当前使用的是URL example.com/watch/15
(有效地在/watch
“子目录” [* 1]中),那么浏览器将解析相对于子目录而不是文档根目录的相对 CSS URL ,因此您将获得绝对/已解析的结果表格的网址。/watch
example.com/watch/styles.css
([* 1]注意,在此上下文中,“子目录”不一定是服务器上的物理子目录-它是URL路径中的“子目录”;是一个附加的路径段。但是浏览器并不知道两者之间的区别。 )
如果在自定义错误文档(ErrorDocument
在Apache 上的指令定义)中使用相对URL,则同样适用。可以在任何URL上调用自定义错误文档,因此静态资源的任何相对URL(CSS,图像,JS等)都将相对于导致错误的URL,而不是相对于错误文档本身(其位置实际上对用户代理隐藏了)。
如果将JavaScript和CSS URL更改为相对于根(以斜杠开头)或绝对URL,则不会出现此问题。这将是首选方法。或者,您可以使用base
元素...
base
标签/元素
另外,您可以base
在head
HTML文档的部分中包含一个元素(尽管这并非没有警告[* 2])。这引用了所有相对URL 相对的绝对URL 。换句话说,由于您期望这些相对URL相对于文档根目录,因此请将以下内容添加到该head
部分:
<base href="http://example.com/">
现在,相对URL(例如URL styles.css
中文档中引用的URL)/watch/15
将请求http://example.com/styles.css
,而不是http://example.com/watch/styles.css
。
[* 2]但是,使用base
元素有一些注意事项。一个主要的问题是,现在打算将当前文档作为目标的任何相对 URL都将作为目标URL。这可能会影响页内锚点(例如和格式的URL等)以及使用空属性(例如)提交给自己的元素。这些针对当前文档的相对URL将需要进行修改,以包括当前页面的完整URL(这可能会打乱使用标记作为解决方法的起点)。href="#top"
href="?sortby=date"
form
action
<form action="" ...
base
参考: