使用.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文件将子域与文件夹匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章