Laravel:如何打开多个域(不是子域)来显示来自同一服务器的页面(没有重定向)?

时间:2018-02-24 19:14:16

标签: php laravel apache hosting

我有一个用域名托管的Laravel项目:example.com。 我有几个客户域名称client1.com,client2.com等。 我需要一个系统(比如apache配置),如果有人输入client1.com,它应该显示来自example.com/client1.com的页面

5 个答案:

答案 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');
    });
});
  

注意:这不是无限域名的推荐方法