【问题标题】:Match subdomain to folder using .htaccees file [duplicate]使用.htaccess文件将子域与文件夹匹配[重复]
【发布时间】:2020-07-25 21:19:38
【问题描述】:

我正在创建一个博客平台,每个用户都有自己的网站子域。所以我在想是否可以使用 .htaccess 将用户重定向到他们在 URL 中输入的目录。

我基本上是在寻找一种使用该平台动态创建新博客的解决方案,当它这样做时,它将创建一个新的 laravel 项目,并且该项目将拥有自己的子域。

例如

Blog1.example.com 将显示来自 /blog1/public 的内容

Blog2.example.com 将显示来自 /blog2/public 的内容

这可能吗,还是我应该寻找不同的解决方案?

我正在使用 Apache2 和 laravel

【问题讨论】:

  • 在 Google 上搜索子域通配符

标签: php laravel .htaccess server apache2


【解决方案1】:

这是可能的。 首先,您必须在域注册商/提供商的仪表板上允许/启用通配符子域。 然后设置应用程序路由以支持子域路由。

https://laravel.com/docs/7.x/routing#route-group-subdomain-routing

逻辑是你不限制任何请求

anything.example.com

因为你已经启用了

*.example.com

在注册商处。如果anything 在你的blogs.slug 列中不存在,你会

然后你通过上面那个链接的文档中显示的 laravel 的子域路由进行这种过滤。

Route::domain('{slug}.example.com')->group(function () {
    Route::get('blog/{slug}', function ($slug) {
        // pseudo code
        //
        // if $slug doesn't exist
        // redirect to some generic or 404 page
    });
    // or
    // Route::get('/blog/{slug}', 'BlogController@show')->name('blog.show');
});

在控制器中你会有类似的东西

BlogController extends Controller
{
    public function show(string $slug)
    {
        $blog = Blog::where(['slug' => $slug])->first();
        return view('blog.show', compact('slug'));
    }
}
// this block is implemented valid way if you use routing call that is commented out `Route::get('/blog/{slug}', 'BlogController@show');` instead anonymous callback function shown before that line in route file. 

您还可以实现其他一些事情,例如将 Blog 模型中的 primaryKey 设置为 'slug' 字段,然后您就可以将隐式模型绑定与 public function show (Blog $blog) { /** return $blog */ } 等一起使用,但这是您可以开始的地方。基本不需要.htaccess 修改。

【讨论】:

  • 我实际上在想的是,每次有人创建一个新博客时,我都会运行一个命令来创建一个新的 Laravel 应用程序,而不是在我想运行的一个 Laravel 应用程序中运行它每个博客都有自己的 Laravel 应用,使用 blog.example.com、blog2.example.com 等
  • 不需要。采用这种方法的原因是什么?
  • 稍后,我将允许用户通过构建插件管理器来安装自己的插件。我只是在想,如果我必须在一个运行大量插件的应用程序上运行它,那将是矫枉过正,最好将其分离到自己的应用程序中,这样它就不会包含太多插件。
  • 很多愿望没有一行代码。每条新评论都在提高标准。我认为 Stackoverflow 上的任何人都无法提供帮助,除非您有明确包含错误发生位置的代码的具体问题。热烈建议阅读how to ask perfect question的这篇文章。或者您可能想问here(软件工程),直到您没有针对 SO 社区的概念和具体代码问题。
猜你喜欢
  • 2011-08-05
  • 2011-03-02
  • 2013-04-18
  • 2011-10-07
  • 2019-12-21
  • 2015-12-07
  • 1970-01-01
  • 2012-01-09
  • 2017-03-05
相关资源
最近更新 更多