Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 如何:将对图像、css和js的请求重写到每个应用程序的不同文件夹中?_Apache_Mod Rewrite_Codeigniter - Fatal编程技术网

Apache 如何:将对图像、css和js的请求重写到每个应用程序的不同文件夹中?

Apache 如何:将对图像、css和js的请求重写到每个应用程序的不同文件夹中?,apache,mod-rewrite,codeigniter,Apache,Mod Rewrite,Codeigniter,我正在尝试建立一个多应用程序CodeIgniter站点,所有应用程序的资产将存储在一个名为“资产”的文件夹中。在这个文件夹中,每个应用程序都有自己的资产文件夹。所以,如果这是我的根目录 user_guide apps_folder (this is where all my application folders live) system assets 用户指南 apps\u文件夹(这是所有我的应用程序文件夹所在的位置) 系统 资产 …资产文件夹的组织方式如下: assets myap

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

user_guide apps_folder (this is where all my application folders live) system assets 用户指南 apps\u文件夹(这是所有我的应用程序文件夹所在的位置) 系统 资产 …资产文件夹的组织方式如下:

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

以下是请求:www.myapp1.com/js/jquery.js

该文件位于:assets/myapp1/js中

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

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

谢谢,

您可以使用AliasMatch

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

别名匹配^(.*\)(js | css)$/path/to/assets/myapp1$1$2

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

您的规则将如下所示:

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

玩得开心

据我所知,相同的公共路径可能会根据文件后缀映射到不同的私有路径。但是别名会将所有公共路径映射到同一个内部路径,不是吗?但是我尝试只重定向对js、css和图像文件的请求。根据框架的要求,所有其他请求都需要通过引导文件传递。您的解决方案似乎适用于对根目录的所有请求,不是吗?我认为Apache会将目录映射到彼此的顶部,因此如果在别名中找不到资源,则会检查根目录。我只是测试了一下,但事实并非如此。但是看看AliasMatch,它会让你和正则表达式匹配。我一定是做错了什么。我将上面的行添加到VirtualHost块的末尾并重新启动了服务器,但它给了我一个404错误。有没有办法调试Apache指令?我的意思是,我对你上面的解决方案也有同样的问题。然后我把js文件夹移到了根目录下,果然,它成功了。看起来服务器根本没有重写这些URL,不管是什么原因。我明白了。是的,这应该行得通,但当我试图在本地实现这一点时,它并没有像应该的那样工作。我不知道怎么了。这是我的.htaccess文件,它位于根目录下。RewriteCond%{HTTP\u HOST}myapp1\.localhost\.dev$RewriteRule^/js/(.*)\.js$assets/myapp1/js/$1 RewriteCond$1^(assets |.*.js |.*.css |.*.png | user | guide | index\.php | robots\.txt)RewriteRule^(.*)/codeigniter-171/index.php/$1[L]简单解释一下,第二个重写规则是通过引导程序重定向所有请求,但是当我删除它时,同样的404错误也会发生。另外,我意识到上面的规则最后可能需要.js,在$1之后,找不到导致404的原因。重写规则中js前面的斜杠不应该在那里。老兄,3个小时来解决这个问题。你好,皮卡多。是的,你说得很对。。。在$1后面应该是一个.js。你可以发布实际的工作规则吗?我会更新我的例子,以便将来的人能够正确使用。对不起,我应该在发布之前为您配置apache并测试一下。我只是根据文档整理了一些东西。。。但实际上我应该确保它100%有效。我的错(