我有一个用域名托管的Laravel项目:example.com。 我有几个客户域名称client1.com,client2.com等。 我需要一个系统(比如apache配置),如果有人输入client1.com,它应该显示来自example.com/client1.com的页面
答案 0 :(得分:6)
你正在做的事情看起来相当hacky,你可能想尝试另一种方法,但是如果你坚持这种方法并且不想发布重定向,你可能想尝试使用Apache作为代理。试试这样的虚拟主机:
<VirtualHost *:80>
ServerName client1.com
ProxyPassMatch "^/(.*)$" "http://example.com/client1.com/$1"
</VirtualHost>
我没有测试过,但它应该给你一个想法。
此机制不会重写响应正文,因此您可能会遇到多个问题,例如链接中的网址。确保内部客户端应用程序使用相对URL。
答案 1 :(得分:2)
您想要做的事情需要两个步骤。第一个是告诉Apache将域指向同一个Laravel应用程序。
<VirtualHost *:80>
ServerName example.com
ServerAlias client1.com, client2.com, client3.com
DocumentRoot /path/to/your/laravel/public/
<Directory "/path/to/your/laravel/public/">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
一旦所有客户端域指向同一个Laravel应用程序,您只需读取控制器中的servername并将servername传递给您的视图即可。像这样:
<?php
class YourController extends Controller
{
public function index(Client $client)
{
$domain = $_SERVER['SERVER_name'];
return view('my.view', ['client' => $domain]);
}
}
访问client1.com/foo/bar
后,$domain
变量将client1.com
答案 2 :(得分:1)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^client1\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/client1.com/ [R=301,L]
这应该可以解决问题。您可以将其直接添加到客户端apache配置中,也可以在每个客户端webroot上创建.htaccess文件。这两种方式都可以解决问题。
答案 3 :(得分:1)
从客户端域到域的重定向
在apache站点配置example.com.conf
中尝试此操作(全部在同一文件中。)或者您可以通过基于IP的(Apache Source)
Listen 80
<VirtualHost *:80>
DocumentRoot "/www/example/client1/"
ServerName client1.com
ServerAlias www.client1.com
#Server Options
#Directory Options
#Log Options
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/www/example/client2/"
ServerName client2.com
ServerAlias www.client2.com
#Server Options
#Directory Options
#Log Options
</VirtualHost>
答案 4 :(得分:1)
由于您有一个包含多个域的Laravel应用程序,我建议您按照以下步骤解决您的问题。
Apache中的域配置:
ServerName dev.laravel.com
ServerAlias dev.laravel-client1.com dev.laravel-client2.com
Laravel应用程序路径配置:
for:dev.laravel-client1.com
Route::domain('dev.laravel-client1.com')->group(function () {
/* client2 domain routes here */
Route::get('/', function () {
return view('client1');
});
Route::get('/something', function () {
return "Something at client 1";
});
});
for:dev.laravel-client2.com
Route::domain('dev.laravel-client2.com')->group(function () {
/* client2 domain routes here */
Route::get('/', function () {
return view('client2');
});
});
注意:这不是无限域名的推荐方法