【问题标题】:mod_rewrite not loading css and js filesmod_rewrite 不加载 css 和 js 文件
【发布时间】:2012-07-21 14:28:56
【问题描述】:

我对 mod_rewrite 条件/规则有一个奇怪的问题。

这是我正在使用的条件和规则。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?params=$1 [QSA,L]

我的问题是,如果我访问 www.example.com 和 www.example.com/page 它加载正常但是当我尝试加载 www.example.com/page/category 时它会加载页面但找不到 css 和javascript。它会尝试从 page/css 而不是 / 目录加载它们。

对我做错了什么有什么想法吗?我在这里进行了搜索并尝试了一些类似添加的方法

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

RewriteRule ^(images|css|javascript)(.*)$ index.php?params=$1 [QSA,L]

但这似乎没有太大区别。

感谢阅读

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    问题是静默重写不会告诉访问者的网络浏览器他们实际上正在查看来自不同目录路径的页面。

    因此,对 /page 的请求让浏览器(正确地)认为它正在查看 Web 服务器上顶级公共目录中的资源,图像和 CSS 文件也是如此。

    但是对 /page/category 的请求让浏览器(错误地)认为它正在查看位于名为 page 的子目录中的资源。因此,当浏览器发送对 CSS 和图像文件的请求时,它会要求服务器在 /page/ 子目录中查找它们,但实际上并不存在。因此,当浏览器尝试获取图像和 CSS 文件时,服务器会返回 404 代码。

    解决此问题的一种方法是将 CSS、图像和其他页面引用资源的路径更改为绝对路径。以正斜杠开头,以便它们相对于实际的顶级公共目录锚定。如果您只有少量资源路径要更新,这可能是最好的方法。例如,改变:

    src="image-name.png"
    

    进入

    src="/image-name.png"
    

    这将强制浏览器使用绝对路径请求文件,而不是根据相对路径推断错误的位置。

    要消除对 RewriteCond 的需要,您可以将 RewriteRule 更改为以下内容:

    RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L]
    

    这将不匹配包含句点(点)符号的任何内容,因此将跳过对图像和 CSS 文件的请求。

    【讨论】:

      【解决方案2】:

      您是否考虑过只使用base element,并删除图片前的“/”?

      【讨论】:

        猜你喜欢
        • 2015-04-09
        • 2012-10-29
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 2018-04-27
        相关资源
        最近更新 更多