php - 使用 .htaccees 文件将子域与文件夹匹配
问题描述
我正在创建一个博客平台,每个用户都有自己的网站子域。所以我在想是否可以使用 .htaccess 将用户重定向到他们在 URL 中输入的目录。
我基本上是在寻找一种使用该平台动态创建新博客的解决方案,当它这样做时,它将创建一个新的 laravel 项目,并且该项目将拥有自己的子域。
例如
Blog1.example.com 将显示来自 /blog1/public 的内容
Blog2.example.com 并将显示来自 /blog2/public 的内容
这是可能的还是我应该寻找不同的解决方案?
我正在使用 Apache2 和 laravel
解决方案
这是可能的。首先,您必须在域注册商/提供商的仪表板中允许/启用通配符子域。然后设置应用程序路由以支持子域路由。
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
改动。
推荐阅读
- linq - 使用 GroupBy 的 NHibernate LINQ 查询
- python - 在 Python 中从另一个对象创建对象
- c++ - C++:构造函数内部的异常:是或否?
- python - 我想使用 slug 显示产品的单个视图,但我无法遇到位置参数错误?
- c++ - 如何在 QT(c++) 中循环更改标签
- macos - 如何为 NSPasteboardTypeFileURL 设置DataProvider
- spring-boot - 如何在spring boot中访问没有令牌的端点?
- python - 我们可以使用 GCP Cloud 功能将数据从 Google 云存储发送到 SFTP 服务器吗?
- swift - 如何在 SwiftUI 中动态添加和保存部分/标题?
- scipy - 显然缺少 scipy 功能