【问题标题】:.htaccess ignore requests for css/js/images?.htaccess 忽略对 css/js/images 的请求?
【发布时间】:2015-12-30 05:12:43
【问题描述】:

我目前正在运行这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.html
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

但是当内部 .html 文件请求 CSS 或 JS 文件时,我收到“找不到资源”错误,并且文件的 URL 类似于:

www.domain.com/the-inner-page/js/script.js

而不是

/js/script.js

我可以在 .htaccess 文件中添加一些内容来避免这个问题吗?

谢谢!

【问题讨论】:

  • 你的 html 是什么样的?
  • 在css前面加一个/。如果您按照自己的方式进行操作,它将尝试在您的当前目录中找到它。
  • 当您编写以/ 开头的href 链接时,这意味着该链接是相对链接而不是完整链接。您必须使用完整链接或在内页中使用../

标签: javascript html css .htaccess


【解决方案1】:

将此添加到您的 html 的 head 部分。然后你就可以给你的css文件留下相对的URL。

<base href="/" />

【讨论】:

  • 我建议不要这样做,因为他可能有一些他想与文件相关的文件。
  • @Jacques 否,因为他的重写,路径更改,他的所有资源现在将显示相对于重写的目录。他将获得 404 的资产。他现在需要将它们设为绝对路径,使用前导斜杠或使用涵盖所有内容的基本标记。
  • 其实我的说法还是正确的。如果他有一个与文件名同名的目录,他在其中存储了一个特殊的 css 或 js 文件,他只需要为该页面加载,那么他将不得不从 root 写入路径,而不是相对于 where 写入路径他在档案里。这包括是否有子页面的href,即:www.domain.com/the-inner-page/child-page/。使用基本href,他必须将url写为/the-inner-page/child-page,而不仅仅是child-page
  • 这不是他的问题,他说这是从根源上。 /js/script.js您正在编造不存在且他没有说是问题的场景。因此,对于他当前的问题,这就是解决方案。这是一个非常常见的重写问题,我已经回答了几十次同样的问题。
  • “你在编造不存在的场景”,不,我很现实。我的意思是仅将根相对 url 用于与根相关而不是 everything 的事物,并使用与网站非常常见的可能场景。
【解决方案2】:

重写不是问题。将您对 css 的引用更新为 root 相关(以 / IE 开头:href="/path/to.css"),或者您可以使用 &lt;base href="/"&gt;,如 Panama Jack 所述。

我建议使用 root relative,因为它不会阻止您将所有相对 url 写为 root relative,只是那些需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多