以前一直在尝试将tp6的多应用名称隐藏,使用了很多方法尝试都失败了,因为tp6和tp5的实现原理有些不一样
thinkphp6开启多应用模式(在thinkphp5对应的是多模块),假设我们设置home应用为前台模块,admin为后台模块,api为api接口模块,common为公共数据处理模块。虽然可以通过重写路由规则将一个个方法来重写,但是下面这个路径:
https://www.dimhok.com/home/index/index.html
即便通过路由规则重写,如这样的代码:
Route::get('/', 'home/index/index');
生成的地址是这样的:
https://www.dimhok.com/home/
实际上作为用户前台都带上一个并没有多少意义的home/,自然会影响url的美观度。
而且路由规则,我们需要针对一个个方法分别重写,那么有没有什么办法不管是什么路径都可以统一完成重写呢?也就是在默认路由生成的url中去掉应用的名称(如home)呢?
答案当然是有的!当然,thinkphp6的设计理念就已经不再是面向后台和前端融合在一起的传统开发方式,而是针对前后端分离开发而设计的,比如最典型的就是已经把session给禁用了,而是用一种类似cache的方式来模拟实现session。但是,实际上thinkphp6用来做非前后端分离的应用也是可以的。首先说明的是,这篇文章虽然是针对tinkphp6.0,但对于thinkphp5也具有参考意义。
解决的办法就是使用:应用绑定域名
通过config/app.php来配置多域名,设置domain_bind,如这样设置:
// 域名绑定(自动多应用模式有效)
'domain_bind'=> [
'www'=>'home',
'admin'=>'admin',
'api'=>'api'
],
比如我的一个页面是这样的
http://www.dimhok.com/home/article/timeline
通过上述的设置,接着在app/home/route/route.php中设置路由规则如下:
Route::rule('timeline', 'home/article/timeline');
现在只需要访问如下网址即可
http://www.dimhok.com/timeline
既将网址得到精简,又增强了网站的安全性,十分的完美
但这样处理还是会有问题,那就是后台admin页面会报错,因为会将admin作为home的控制器,为了解决这个问题,需要设置二级域名来解决
打开nginx配置文件,加入配置二级域名的代码
server {
listen 80;
server_name admin.funsinx.com;
root "/Users/xxx/Documents/workspace/funsinx/public";
index index.php index.html index.htm;
location / {
#autoindex on;
autoindex off;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
这样如果想使用后台页面,使用admin.funsinx.com打开即可,不影响前端
Comments