【问题标题】:My css imges js path is changed after using of mod_rewrite使用 mod_rewrite 后,我的 css imges js 路径发生了变化
【发布时间】:2015-09-21 15:43:18
【问题描述】:

我的网址已更改为

http://example.com/course.php?id=1001

http://example.com/course/1001

但是在更改所有css js和图像的url后不起作用

我用过这个代码

RewriteEngine On
RewriteRule ^course/([A-Za-z0-9-]+)/?$ coursedetails.php?id=$1 [NC,L]

【问题讨论】:

  • 那么您应该免除 css/image url 的重写...例如RequestCond -f %{REQUEST_URI}

标签: html css apache .htaccess mod-rewrite


【解决方案1】:

一种解决方案是使用绝对路径(例如 /css 或 /js 而不仅仅是 css/、/js,但这看起来不是一个可靠的解决方案,因为我们必须在所有文件上更改它,

这是因为您的相对 URI 的基数已更改。原来,当页面为/course.php?id=1001时,base为/,浏览器正确填写了以/为base的相关链接。但是当浏览器转到像/course/1001 这样的页面时,基础突然变为/course/,它会尝试将其附加到所有相对 URL 的前面,因此它们都不会加载。

您可以将链接设为绝对链接,也可以更改页面标题中的 URI 基础(在 <head> </head> 标签之间):

<base href="/">

【讨论】:

    【解决方案2】:

    第一种方法

    如果这些部分是硬编码的,您可以简单地更改链接,在之前添加../

    path/to/my/assets/style.css

    会变成

    ../path/to/my/assets/style.css


    第二种方法

    您可以按照 Marc 的建议使用 .htaccess(假设您的资产文件夹是 assets

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^course/assets/(.*) assets/$1
    

    或者使用重定向

    RedirectMatch 303 /courses/assets(.*) /assets/$1
    

    注意 303 请参阅其他似乎更合适的响应代码http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-15
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2021-07-12
      相关资源
      最近更新 更多