使用mod_rewrite绕过PHP框架来处理图像,js和CSS文件

时间:2018-12-04 21:16:24

标签: php .htaccess frameworks

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

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

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

我要安装Apache 2.2。在这些模块中提供图片,js和CSS,而不是通过PHP。

我尝试编辑.htaccess文件以直接返回文件。它无法正常工作,我似乎找不到有关如何执行此操作的文档。

URL的格式:

https://example.com/Modules/cart/images/shopping_cart.png https://example.com/Modules/cart/js/shopping_cart.js https://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]

我想念什么?

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

[更新]

根据@Dave提供的信息,我已经创建了从文档根目录到模块图像目录的子目录的符号链接。

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

但是我仍然得到以下标头,表明它正在通过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]

1 个答案:

答案 0 :(得分:0)

我知道了。对于那些可能想知道最终答案是什么的人,我在这里详细说明。

我在模块中创建了符号链接,以便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]

现在,我们可以在逐个案例的基础上过渡到新位置,同时仍旧加快旧代码的速度。