使用mod_rewrite绕过PHP框架处理图像、js和css文件



我们正在使用一个流行的PHP框架来托管一个网站。

我们添加了一些内容,使我们能够进行自定义模块,将控制器、服务对象、PHP模板、Javascript、CSS和图像封装到一个子目录中。

我们在供应商目录之外创建了它,以将这些模块与第三方库区分开来。

我想做的是拥有Apache2.2。在这些模块中提供图像、js和css,而不是通过PHP。

我已经尝试编辑.htaccess文件以直接返回文件。它不起作用,我似乎找不到关于如何做到这一点的文档。

URL的格式为:

https://example.com/Modules/cart/images/shopping_cart.pnghttps://example.com/Modules/cart/js/shopping_cart.jshttps://example.com/Modules/cart/css/shopping_cart.css

以下是我目前所拥有的:

RewriteCond %{REQUEST_URI} ^/Modules/(.*)/images/(.*)$
RewriteCond /var/www/app/%{REQUEST_URI} -f
RewriteRule ^/Modules/(.*)/images/(.*)$ /var/www/app/Modules/$1/images/$2 [L]

我错过了什么?

编辑添加:模块目录位于虚拟主机的文档根/var/www/public之外,因此它们当前通过PHP提供服务。实际上,我正在尝试优化一个当前运行的网站。

[更新]

根据@Dave提供的信息,我创建了一个从文档根目录到模块的images目录的符号链接。

因此符号链接的形式是指向/var/www/app/Modules/[module name]/images/[document root]/images/[module name]/

然而,我仍然得到以下标题,表明它正在通过PHP:

Request URL: https://example.com/Modules/cart/images/shopping_cart.png
Server: Apache/2.4.35 (FreeBSD)
X-Powered-By: PHP/7.2.10

我的新重写规则是:

RewriteCond %{REQUEST_URI} ^/Modules/(.*)/images/(.*)$
RewriteCond %{DOCUMENT_ROOT}/images/$1/$2 -f
RewriteRule ^/Modules/(.*)/images/(.*)$ %{DOCUMENT_ROOT}/images/$1/$2 [L]

我让它工作起来了。对于那些可能想知道最终答案是什么的人,我将在这里详细介绍。

我在模块中创建了符号链接,这样Apache就可以按照以下格式查看相对于文档根的链接:

[document root]/images/[module name]/ pointing to /var/www/app/Modules/[module name]/images/
[document root]/css/[module name]/ pointing to /var/www/app/Modules/[module name]/css/
[document root]/js/[module name]/ pointing to /var/www/app/Modules/[module name]/js/

那么重写规则如下:

RewriteCond %{REQUEST_URI} ^/Modules/(.*)/(js|css|images)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2/%1/%3 -f
RewriteRule ^(.*)Modules/(.*)/(js|css|images)/(.*)$ %{DOCUMENT_ROOT}/$3/$2/$4 [L]

现在,我们可以根据具体情况转换到新的位置,同时仍然加快旧代码的速度。

最新更新