【问题标题】:mod_rewrite causes loss of stylesheetmod_rewrite 导致样式表丢失
【发布时间】:2009-12-20 19:08:52
【问题描述】:

我正在使用 mod_rewrite 来清理我的一些 URL (duh),并且我得到了它的工作。排序。它重定向到正确的页面,但样式表不显示。这是我在 .htaccess 中的代码:

RewriteEngine on
RewriteRule ^blog/([^/\.]+)/?$ post.php?page=$1 [L]

那么发生了什么?顺便说一下,这是我第一次使用 mod_rewrite。

【问题讨论】:

    标签: php apache mod-rewrite


    【解决方案1】:

    如果您使用相对链接,您的新 URL 可能会破坏您的 CSS 链接。例如:

    使用的样式表链接:../css/stylesheet.css
    旧页面:/blog/example/post.php
    新页面:/blog/2009/12/example/post.php

    此中断也会影响图像。 解决此问题的一种简单方法是确定 CSS 的最终 URL 并对其进行绝对链接。例如

    /css/stylesheet.css
    

    这意味着无论您在结构中的哪个位置,CSS(或图像,如果您遵循此例程)都会正常显示。

    【讨论】:

      【解决方案2】:

      您的 CSS(假设 /blog/style.css)将发布到 post.php?page=style.css

      要修复,我建议将其放在 RewriteEngine 之后

      RewriteCond %{SCRIPT_FILENAME} -f
      RewriteCond %{SCRIPT_FILENAME} -d
      

      这会将文件存在的所有请求(例如 CSS/JS 文件)直接转发到该文件。

      以后,我建议在浏览器上浏览该 URL,看看它会将您带到哪里。如果它在浏览器中不起作用,它将不适用于页面。

      【讨论】:

      • 好的,现在样式表在 /style/stylesheet.css 处有自己的目录,这有什么改变吗?我做了你上面说的,它给了我一个 404 错误。另外,我不明白为什么它不起作用,因为当我转到它真正要去的 URL 时,它工作得很好。它不是基本上只是做一个重定向,因此就像去实际页面一样吗?迷茫...
      • 如果你浏览到 some.thing.com/style/stylesheet.css,你明白了吗?如果是这样,您的 HTML 页面应该具有与您的 标记中的 CSS 页面相同的 URL。
      【解决方案3】:

      可能只是您的新 URL 导致相对 URL 的解析方式与旧 URL 不同。试试这样的绝对 URL 路径:

      /style/screen.css
      

      而不是像这样的相对 URL 路径:

      style/screen.css
      ./style/screen.css
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多