【问题标题】:.htaccess if request is a file or directory, redirect with absolute path.htaccess 如果请求是文件或目录,则使用绝对路径重定向
【发布时间】:2014-01-10 06:48:35
【问题描述】:

使用此 htaccess 配置,我必须将所有 .js 和 .css 或图像路径设置为绝对路径。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]

如何修改这个 htaccess 以便我可以将图像、css 或 js 文件的路径不必是绝对路径?

有可能吗?

之前谢谢。


添加

这样说我的目录结构:

root
-- asset
   -- images
   -- css
   -- js

【问题讨论】:

    标签: .htaccess relative-path absolute-path


    【解决方案1】:

    将相对 URI 基础添加到页面标题可能更容易:

    <base href="/" />
    

    但是如果你必须使用htaccess,并且你所有的脚本和样式都在同一个地方,你可以用一个条件来捕获它:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/path/to/css
    RewriteRule ([^/]+\.css)$ /path/to/css/$1 [L,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/path/to/js
    RewriteRule ([^/]+\.js)$ /path/to/js/$1 [L,NC]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/path/to/images
    RewriteRule ([^/]+\.(png|jpe?g|gif))$ /path/to/images/$1 [L,NC]
    

    编辑:

    如果你的 js/css/images 的路径都在同一个地方,你可以尝试组合规则:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/assets/
    RewriteRule ^(css|js|images)/(.*)$ /assets/$1/$2 [L,NC]
    

    【讨论】:

    • 感谢您的回复。但是正则表达式让我大吃一惊。你能向我解释一下这条线吗? RewriteCond %{REQUEST_URI} !^/path/to/css RewriteRule ([^/]+\.css)$ /path/to/css/$1 [L,NC]我在我的问题中添加了更多信息。
    • @TikasMamed !^/path/to/css 表示“不以 /path/to/css 开头”。而([^/]+\.css)$ 的意思是“任何以&lt;some characters&gt;.css 结尾的东西”。鉴于您的目录结构,您只需将/path/to/ 替换为/assets/
    • 为什么js和图片要重复这些行? RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f
    • @TikasMamed 你不想重写已经指向有效资源的东西。重写条件仅适用于紧随其后的规则,因此您需要重复要应用的条件。
    • 这很糟糕,因为我真的不明白这个.. 怎么样:如果我使用你编辑的答案并且我在asset/images 中有image.jpg,我的img src 属性应该只包含images/image.jpg ?
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2022-07-29
    • 2017-04-02
    相关资源
    最近更新 更多