我们正在使用流行的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]
答案 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]
现在,我们可以在逐个案例的基础上过渡到新位置,同时仍旧加快旧代码的速度。