我需要一些帮助。
我想从一个Laravel 5.1安装中创建一个多站点。我根据子域读取了多个.env
。
但我想每个网站都有自己的公共文件夹。
例如,使用此文件夹:
-> public
-> custom_publics
-> user1
-> user2
-> etc
我可以设置public_path()
,但当我尝试使用asset()
功能时,该功能无效。
例如:我在http://user2.test.on/custom_publics/user2/image.png
上有一个image.png。我将public_path()更改为custom_publics/user2
。但是,当致电asset(image.png)
给我http://user2.test.on/image.png
而不存在时,
有一些方法指向http://user2.test.on/image.png
,但实际上是http://user2.test.on/custom_publics/user2/image.png
?
或者,我如何设置asset()函数路径?
有人试过吗?有帮助吗?
此致,Eric。
答案 0 :(得分:2)
好的,我终于得到了答案。
像这样创建一个AssetsController
控制器:
<?php
namespace app\Http\Controllers;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Response;
use app\Http\Controllers\Controller;
use Redirect;
class AssetsController extends Controller
{
/**
* Get asset url and return response based on file type
*
* @param $filename
* @return mixed
*/
public function data($filename)
{
$path = public_path().'/'; // You need to change your public path before this
$path = $path.$filename;
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
}
}
所以现在,我需要更改资产助手功能。我创建了一个ServiceProvider来在config / app.php下创建神奇的注册:
<?php
namespace app\Providers;
use Illuminate\Support\ServiceProvider;
class SitePathServiceProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = false;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Reset asset function
*
* @param $path
* @return string
*/
public function asset($path)
{
return url('assets/'.$path);
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
诀窍是做一个路线助手:
Route::get('/assets/{params}', 'AssetsController@data')->where('params', '.*');
此路线捕获所有网址:
http://www.example.com/assets/demo.jpg
http://www.example.com/assets/uploads/demo.jpg
http://www.example.com/assets/large/structure/folder/demo.jpg
我知道它有点复杂,但却像魅力一样。
尊敬的
答案 1 :(得分:0)
可能解决此问题的一种方法是使用Apache重写,以便http://user2.test.on/image.png
的请求实际转到http://test.on/custom_publics/user2/image.png
。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.test\.on
RewriteRule ^(.*)$ http://test.on/custom_publics/%1/$1 [L,NC,QSA]
您可能需要针对特定目的调整上述示例。请在此处查看更多信息:.htaccess rewrite subdomain to directory