【问题标题】:HOWTO: rewrite requests for images, css and js to different folders for each application?如何:将图像、css 和 js 的请求重写到每个应用程序的不同文件夹?
【发布时间】:2009-06-29 02:01:51
【问题描述】:

我正在尝试构建一个多应用 CodeIgniter 站点,其中所有应用的资产都将存储在一个名为“assets”的文件夹中。在这个单一文件夹中,每个应用程序都有自己的资产文件夹。所以,如果这是我的根目录……

用户指南 apps_folder(这是我所有应用程序文件夹所在的位置) 系统 资产

...资产文件夹将这样组织:

资产 我的应用程序1 js 图像 css 媒体

这是我的挑战。我正在尝试编写一个 apache 指令,该指令将对以 css、js、png 和 gif 结尾的文件的所有请求重写到该应用程序的相应资产目录。但是用户无法知道这些资产在服务器中的确切位置。举个例子:

这是请求:www.myapp1.com/js/jquery.js

文件位于:assets/myapp1/js

该指令将检查 a) 域地址 b) 文件扩展名

...并且基于这些变量,将重写 url,从而隐藏资产的真实位置,并使引用资产成为可能,就好像它们都位于网站的根目录中一样。有没有人做过这样的事情?

谢谢,

【问题讨论】:

    标签: apache mod-rewrite codeigniter


    【解决方案1】:

    这是完全可能的。请参阅 Apache 重写指南:

    http://httpd.apache.org/docs/1.3/misc/rewriteguide.html

    您的规则将如下所示:

    RewriteCond   %{HTTP_HOST}  \.myapp1\.com$
    RewriteRule  ^/js/(.*)\.js$ assets/myapp1/js/$1
    

    玩得开心!

    【讨论】:

    • 我明白了。是的,这应该可以,但是当我尝试在本地实现它时,它并没有像它应该的那样工作。我不知道出了什么问题。这是我的 .htaccess 文件,它位于根目录。 RewriteEngine on RewriteCond %{HTTP_HOST} myapp1\.localhost\.dev$ RewriteRule ^/js/(.*)\.js$ assets/myapp1/js/$1 RewriteCond $1 !^(assets|.* \.js|.*\.css|.*\.png|user_guide|index\.php|robots\.txt) 重写规则 ^(.*)$ /codeigniter-171/index.php/$1 [L] IfModule>
    • 简单解释一下,第二个 Rewrite 规则是通过引导程序重定向所有请求,但是当我删除它时也会发生相同的 404 错误。另外,我意识到上面的规则最后可能需要 .js,在 $1 之后,不是吗?
    • 找到了404的原因。RewriteRule中js前面的斜线不应该有。伙计,要花 3 个小时来弄清楚这件事。
    • 嗨皮卡多。是的,你说的很对……应该是 $1 之后的 .js。能否请您发布实际的工作规则,我将更新我的示例以在将来对人们正确。抱歉,我应该在发布之前实际配置好 apache 并为你测试一下。我只是根据文档整理了一些东西......但实际上我应该确保它 100% 工作。我的错。 :(
    【解决方案2】:

    您可以使用 AliasMatch

    <VirtualHost myapp1>
       AliasMatch ^(.*\.)(js|css)$ /path/to/assets/myapp1$1$2
    </VirtualHost>
    

    【讨论】:

    • 据我了解,同一个公共路径可能会根据文件后缀映射到不同的私有路径。但是 Alias 会将所有公共路径映射到相同的内部路径,不是吗?
    • 但我试图仅重定向对 js、css 和图像文件的请求。根据框架的要求,所有其他请求都需要通过引导文件进行引导。您的解决方案似乎适用于对根的所有请求,不是吗?
    • 我认为 Apache 会将目录相互映射,因此如果在别名中找不到资源,则会检查根目录。我刚刚测试了它,但事实并非如此。但是看看 AliasMatch,它可以让你匹配一个正则表达式。
    • 我一定是做错了什么。我将上面的行添加到 VirtualHost 块的末尾并重新启动了服务器,但它给了我一个 404 错误。有没有办法调试 Apache 指令?我的意思是,我对你上面的解决方案有同样的问题。然后我把 js 文件夹移到了根目录下,果然成功了。看起来服务器根本没有重写这些 url,无论出于何种原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2012-05-26
    相关资源
    最近更新 更多