我正在尝试从CDN而不是/ static文件夹提供所有静态文件(js,css,images)。我开始编写自己的子来重写图像URL:
sub uri_for_image {
my ( $c, $path, @args ) = @_;
my $uri = $c->uri_for($path, @args);
if (MyApp->config->{use_cdn}) {
my $cdn = MyApp->config->{cdn_location};
$uri = $path;
$uri =~ s/^/$cdn/si;
}
return $uri;
}
但后来我意识到要自动重新路由所有静态文件需要做更多的工作。我该如何设置静态文件的CDN URL?
我正在研究配置Static::Simple,但似乎只有本地文件位置的设置。
答案 0 :(得分:1)
您认为Catalyst实际上可以并且应该为您做些什么?
我担心如果你想要在应用程序之外生成你自己的链接,那么你几乎就是你自己 - 没有什么催化剂可以真正做或提供帮助你在这里,是吗?
或者您只是希望uri_for
粉碎从/static
开始指向您的CDN的所有路径?您可以将uri_for
包裹起来并使其成功吗?
我认为你的版本(有一个单独的方法)更干净整洁,但是如果你的所有静态内容都进入了CDN,那么只要给你uri_for
你想要的行为是合理的。
答案 1 :(得分:0)
2013年晚些时候,有人为此目的撰写了Catalyst::Plugin::ExternalURI
。
从概要部分:
use Catalyst qw/ ... ExternalURI ... /; __PACKAGE__->config( externaluri => [ # Converts urls with the form of /static/css to start with another domain name { '^/static' => 'http://static.mydomain.com' }, ... { 'MATCH' => 'REWRITE' } or { match => '^/static', rewrite => 'http://static.mydomain.com' }, ] );