【问题标题】:Doesn't recognized my css, js, and so on无法识别我的 css、js 等
【发布时间】:2010-10-08 07:11:33
【问题描述】:

我有 .htacces 之类的:

RewriteEngine On
RewriteRule ^en/$             index.php?page=index&lang_id=2
RewriteRule ^contact.html$    index.php?page=contact
RewriteRule ^en/contact.html$ index.php?page=contact&lang_id=2
# ...[and so on]

在我的网站中,我有一个切换语言按钮(图片)。我的基本语言是 Ro,我想把它转换成 En。所以,关键是在真实的服务器上,切换器可以工作。在我的本地服务器 wamp 上,当我尝试切换语言时,在我的浏览器中显示已翻译的文本(因为它们存储在我的数据库中),但它无法识别 css 样式、图像……它出现只有文字。

问题出在哪里?请帮帮我。

【问题讨论】:

    标签: css .htaccess styles mod-rewrite wamp


    【解决方案1】:

    您对外部资源使用的是绝对 URL 还是相对 URL? 问题可能是预先添加的额外文件夹破坏了您的相对网址。

    假设您正在使用一个名为logo.png 的图像并托管在图像文件夹中,并使用图像标签:<img src="images/logo.png" alt="logo" />。因此,通常情况下,如果您在 contact.html 页面上,浏览器将检查位置 http://localhost/images/logo.png,但使用您的 /en 文件夹,浏览器将检查不存在的 http://localhost/en/logo.png

    解决这个问题的方法是使用绝对网址,所以使用

    <img src="http://localhost/images/logo.png" alt="logo" />
    

    应该解决您的问题。

    【讨论】:

    • 我已经用 $BASE_URL 命名了我的文件夹、图像、css,就像在这个例子中一样:"" 和 "" 等等。 BASE URL 被定义为我拥有所有站点文件夹、子文件夹等的文件夹。BASE URL 是用 Smarty 定义的,所以不知道为什么它不起作用。
    • 看来你需要自己设置BASE_URL,尝试设置为http://localhost/,否则只会再次输出相关链接。
    【解决方案2】:

    您可能有一些类似RewriteRule ^en/(.*)$ index.php?page=$1 的规则。

    对于调试,使用 Firefox 的 HttpFox 扩展名,查看服务器返回的文件,以及是否是 200 OK 响应。

    【讨论】:

      【解决方案3】:

      您的浏览器可能会发出对 en/style.css 的请求,这会被第一条规则重定向到 index.php?page=index&lang_id=2 ,换句话说,它永远无法以这种方式找到 css。

      添加

      RewriteRule (css|jpg|png|gif|js|swf)$ - [L]
      

      就在RewriteEngine On之后。

      这确保如果扩展是上述之一,它不会重定向。

      编辑

      好吧,说你的相对链接是 css/style.css 这会自动转换为 baseURL + 链接 因为 baseURL 将是 http://www.example.com/en/ 它会在 en/css/style.css 文件夹中查找 css 而不是 css/style.css

      一种解决方法是始终从样式文件夹中获取 css,从图像文件夹中获取图像,从 javascript 文件夹中获取 javascript 等等。

      示例:

      RewriteCond ([^/]+css)$ style/$1 [L]
      RewriteCond ([^/]+(jpg|png|gif))$ images/$1 [L]
      RewriteCond ([^/]+(js))$ javascript/$1 [L]
      etc.
      

      【讨论】:

      • 我的 style.css 位于名为 css/style.css 的文件夹中,我将你的代码行放在我的 htaccs 中,但什么也没发生。我认为这是一个 wamp 问题,因为正如我已经说过的,在我的 virtual server 中它不起作用,在真正的服务器上它起作用。
      【解决方案4】:

      我遇到了同样的问题,我刚刚发现了这个:

      RewriteEngine On
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.*)/([style|css|js|javascript|images|img|fonts|swf]+)/(.+)\.([^.]+)$ public/$2/$3.$4 [L]
      

      只要所有文件都在以下目录或子目录中:style、css、js、javascript、images、img、fonts 或 swf 都可以使用

      将 public 更改为根目录中的任何文件夹,$2 是文件夹 css、js ... 等 $3 是路径的其余部分

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 2015-12-12
        相关资源
        最近更新 更多