【问题标题】:CSS not loading after redirect with htaccess rewrite rule使用 htaccess 重写规则重定向后未加载 CSS
【发布时间】:2012-01-03 11:53:40
【问题描述】:

我有以下用户个人资料网址的简写

RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1

当我 site.com/name_of_user 时,该网站使用适当的 css 文件进行样式设置

但不是在我这样做的时候site.com/name_of_user/

虽然重定向到了正确的页面...

感谢您的帮助!

【问题讨论】:

  • 当您没有向我们展示调用您的 CSS 的实际 HTML 时,很难说出您的问题是什么,但我怀疑这是因为您在 <link> 标记中错误地引用了目录.

标签: html css .htaccess mod-rewrite


【解决方案1】:

解决此问题的最简单方法是在 HTML 文件的 <head> 中指定 CSS 文件的完整路径。

如果您的 mod_rewrite 规则正在修改 CSS 文件所在的路径,您还需要将其放在 RewriteRule 之前:

RewriteCond %{REQUEST_FILENAME} !-f

这可以确保在重写之前请求与文件不匹配。

【讨论】:

  • +1 不仅是最简单的方法,还可以修复嵌套的子文件夹
  • 这也解决了我的 javascript 文件的问题!
  • 这行得通。谢谢。我的问题可能对其他人有所帮助:我正在从一个位置重定向到另一个位置(没有重写 url),并假设我在旧位置时在新位置。对 .css 文件的访问必须在旧位置(在我的情况下也是新位置)。
  • 我添加了这个,但它仍然没有加载我的 css.. 为什么会这样?
【解决方案2】:

我遇到了同样的问题,并找到了最简单和最实用的解决方案。

<base href="http://www.example.com/" />

它超级干净且易于使用。

【讨论】:

    【解决方案3】:

    链接相对于根目录的css文件 示例:

    <link rel="stylesheet" type="text/css" href="/css/****.css">
    

    【讨论】:

    • 我试过这个对我有用chatfitness.com没有检查答案2
    • 与 OP 相同的问题; (样式适用于“site.com/aaa”,但不适用于“site.com/aaa/bbb”);必须将href="css/***.css 更改为href=/css/***.css。谢谢!
    【解决方案4】:

    当您的页面 URL 为 example.com/name_of_user/ 时,如果您的 HTML 页面对这些资源使用相对路径,则加载资源 css/js/images 可能会导致问题。这是因为浏览器使用当前 URL 解析资源 URL。

    例如,如果一个样式标签是:

    <link rel="stylesheet" type="text/css" href="static/style.css">
    

    您当前的网页网址是:

    http://example.com/name_of_user/
    

    然后浏览器会将css URL解析为example.com/name_of_user/static/style.css而不是example.com/static/style.css。这将导致资源 URL 出现 404,并且您的页面将显示为没有任何样式、脚本和图像。

    您可以使用以下方法之一解决此问题:

    1. 在您的 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 / 开头。

    2. 否则您可以在页面的 HTML 的 正下方 &lt;head&gt; 部分添加此部分:

      <base href="/" />
      

    这样每个相对 URL 都是从该基本 URL 而非当前页面的 URL 解析的。

    【讨论】:

      【解决方案5】:

      尝试在您的 html 文档头部设置正确的 basedir:

      <head>
        <base href="http://example.com/">
      <head>
      

      然后,您的 .htaccess 规则中的任何额外斜杠 (/) 都不会更改 html 文档中的外部源路径。以下规则

      RewriteEngine On
      RewriteBase /
      RewriteRule ^(\w+)/?$ ./profile.php?name_of_user=$1 
      

      不会在文档的&lt;head&gt; 上使用&lt;base href="http://example.com/"&gt; 进行此行为。 它可以正常工作,尤其是对于相关站点文件结构。

      【讨论】:

        【解决方案6】:

        试试这个:

        <IfModule mod_rewrite.c>
            RewriteEngine On
        
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)\.(gif|jpg|png|jpeg|css|js|swf)$ /public/$1.$2 [L,NC]
        
            # Removes index.php from ExpressionEngine URLs  
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /index.php/$1 [L,QSA]
        
        </IfModule>
        

        【讨论】:

        • 在根据需要更改目录名称后,这非常有效。猜猜唯一的缺点是为第一条规则保留一个白名单。对于媒体/不同类型的文件,也许使用黑名单可能是更好的解决方案。
        【解决方案7】:
        RewriteCond %{REQUEST_FILENAME} !-f
        

        这就像一种享受。即使给出绝对链接,我最初也有问题。感谢史蒂夫刘易斯并 +1。

        【讨论】:

          【解决方案8】:

          最简单的方法是使用&lt;base href="site url here"&gt;,这应该在打开HTML head 标记之后不久。 站点 url 需要以 http 或 https 开头;如果您在 localhost 上,则使用 http,例如

          http://localhost/road/ 
          

          【讨论】:

            【解决方案9】:

            我遇到了似乎同样的问题。我试图从以下形式的网站重定向: www.foo/category/details.

            我在“类别”停止加载 CSS 和图像后发现了斜线。

            原因是默认重定向将原始 URL 传递给浏览器。这可以从 window.location.pathname 上的 JScript 跟踪中看出。解决方案就是在重写规则中使用 [R] 标志。

            【讨论】:

              【解决方案10】:

              当您使用此site.com/name_of_user/ 时,您将站点上的工作目录从root 更改为name_of_user,因此请求页面上每个文件或链接的相对路径将变为/name_of_user/ 而不是/ .

              要解决此问题,您需要向 .htaccess 添加额外规则:

              RewriteRule ^name_of_user/(.*)?$ $1
              

              【讨论】:

                【解决方案11】:

                只需在开头的 head 标记之后添加基本路径。例如:

                <base href="website url here">
                

                【讨论】:

                  【解决方案12】:

                  最好和最简单的方法只在重定向文件的顶部添加这个标签,然后一切都会好的!

                  <head>
                     <base href="website url here">
                  </head>
                  

                  【讨论】:

                    【解决方案13】:

                    我遇到了同样的问题,我已经用下面的代码解决了。不是最好的解决方案,但它确实有效。

                    RewriteRule ^(something/)$ something [R] 
                    RewriteRule ^(something)$ index.php?page=$1 [L]
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2020-11-01
                      • 2016-06-08
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多