使用.htaccess文件将子域与文件夹匹配[重复]

Posted

技术标签:

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

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

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

例如

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

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

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

我正在使用 Apache2 和 laravel

【问题讨论】:

在 Google 上搜索子域通配符 【参考方案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 等 不需要。采用这种方法的原因是什么? 稍后,我将允许用户通过构建插件管理器来安装自己的插件。我只是在想,如果我必须在一个运行大量插件的应用程序上运行它,那将是矫枉过正,最好将其分离到自己的应用程序中,这样它就不会包含太多插件。 很多愿望没有一行代码。每条新评论都在提高标准。我认为 *** 上的任何人都无法提供帮助,除非您有明确包含错误发生位置的代码的具体问题。热烈建议阅读how to ask perfect question的这篇文章。或者您可能想问here(软件工程),直到您没有针对 SO 社区的概念和具体代码问题。

以上是关于使用.htaccess文件将子域与文件夹匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重定向影响子域

带有 htaccess 的 CakePHP 子域

.htaccess - 将子域重定向到文件夹

.htaccess 重写语言子域

基于用户的子域[重复]

.htaccess 将子域重写到目录