使用入口文件的方式控制多站点,要添加一个站点,直接在public目录里面添加一个入口文件即可。
## 添加多站点(以index+admin站点为例)
### 1. `public`下添加`admin.php`入口文件
复制`public`下的`index.php`文件为`admin.php`, 并添加以下代码修改admin站点控制器层目录
// 修改admin端控制器层目录
// 定义站点名
define('SITE_NAME', 'admin');
// 定义控制器层目录,若不定义则默认使用站点名作为目录名
define('URL_CONTROLLER_LAYER', 'admin');
### 2. 域名重新配置
- apache服务器
1. 站点配置。在apache的httpd-vhost中加入两个站点的配置:
```
# 默认站点配置
<VirtualHost *:80>
<IfModule mod_dir.c>
DirectoryIndex index.php
</IfModule>
DocumentRoot "/directory/to/your-project/public"
ServerName 您的域名
</VirtualHost>
# admin子站点配置
<VirtualHost *:80>
<IfModule mod_dir.c>
DirectoryIndex admin.php
</IfModule>
DocumentRoot "/directory/to/your-project/public"
ServerName 您的admin子域名
</VirtualHost>
```
2. 重写规则配置(站点public目录下的.htaccess文件)
1. 修改默认重写规则,添加域名限制。
```
# 在上面添加一行域名限制
RewriteCond %{HTTP_HOST} ^您的域名$ [NC]
# 以下为原本的配置信息
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
```
2. 目录中加入重写规则:
```
RewriteCond %{HTTP_HOST} ^您的admin子域名$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ admin.php/$1 [QSA,PT,L]
```
完整的.htaccess文件内容:
```
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
# 默认站点重写规则
RewriteCond %{HTTP_HOST} ^您的域名$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
# admin子站点重写规则
RewriteCond %{HTTP_HOST} ^您的admin子域名$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ admin.php/$1 [QSA,PT,L]
</IfModule>
```
- nginx服务器
在nginx服务器中,同样添加一个admin子域名的站点,默认访问文件改为admin.php即可,完整的nginx配置文件如下:
```
# 默认站点配置
server {
listen 80;
server_name 您的域名;
root /directory/to/your-project/public;
location / {
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# admin子站点配置
server {
listen 80;
server_name 您的admin子域名;
root /directory/to/your-project/public;
location / {
index admin.php;
if (!-e $request_filename) {
rewrite ^(.*)$ /admin.php?s=/$1 last;
break;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
> 以上配置信息中,您需要将目录名及域名改为您的目录及域名。
> 如果需要配置https等信息,请自行添加https证书配置即可。
## 多站点实现的两种方式:
1. 使用子域名。
优点:
1. 不会污染url,不需要再url中加入入口文件名。
2. 缺点:需要在服务器(apache、nginx)中配置相关域名并指向到对应入口文件。无法做到开箱即用。
3. apache必须开启rewrite模块。一般在使用thinkphp框架时,已经开启了重写模块,所以这个限制问题不大。
3. 考虑apache中是否可以通过htaccess文件配置,解决服务器自动配置的问题。
2. url中加入对应入口文件路径。
1. 优点:可以做到开箱即用。不需要修改服务器配置。
2. 缺点:会污染url。前端处理麻烦,需要统一配置url前缀,并在前端ajax请求及对应url跳转时加入前缀。需要修改的地方太多。
3. 前端需要解决默认站点不带前缀与其他站点带前缀的问题。(根据访问url与pathinfo,自动处理前缀,并将前缀发送到前端)
---
考虑怎么将两种用法综合,用户可以开箱即用,及在url中加入对应入口文件,并可通过默认入口文件放人默认站点。也可通过配置子域名,去除url污染。
> 首选实现1,然后再1的基础上实现2。
- 序言
- 下载及安装
- 目录结构
- 基础
- 多站点-单入口文件(推荐)
- (旧)多站点-多入口文件方式
- (旧)入口文件
- (旧)站点配置
- 按钮操作
- 区块概念
- 构建器(SBuilder)
- 页面-Page
- 设置页面标题
- 添加页面提示信息
- 设置页面Tab
- 设置页面背景色
- 设置是否点击遮罩关闭
- 添加区块
- 区块-Block
- 设置区块名
- 设置区块布局
- 表单(form)
- 添加表单项通用方法
- 添加表单项
- 单行文本框
- 多行文本框
- 数字输入框
- 密码框
- 数组输入框
- 单选框
- 状态选择器
- 复选框
- 下拉框
- 级联选择器
- 开关
- 日期选择器
- 日期时间选择器
- 日期范围选择器
- 日期时间范围选择器
- 时间选择器
- 时间范围选择器
- Tree 树形组件
- 图标选择器
- 颜色选择器
- 单图片上传
- 多图片上传
- 视频上传
- 单文件上传
- 多文件上传
- 富文本编辑器-QEditor
- 富文本编辑器-UEditor
- 小程序富文本
- 静态文本
- 隐藏表单项
- 表格数据输入框
- 分组
- 地图选择器(未实现)
- 地区选择器(未实现)
- 穿梭框(未实现)
- 图片裁剪(未实现)
- 邮箱输入框(未实现)
- 设置表单LabelWidth
- 设置表单提交地址
- 设置默认按钮标题
- 提交表单确认框
- 隐藏默认按钮
- 添加额外按钮
- 设置触发器
- 设置表单数据
- 表单布局
- 模板
- 表格(table)
- 设置表名
- 添加顶部按钮
- 添加时间段筛选
- 设置搜索栏
- 添加列
- text
- byte
- status
- tags
- yesno
- datetime
- icon
- image
- images
- external_image[已废弃]
- external_images[已废弃]
- link
- html
- select
- text.edit
- group
- 多选框栏
- 数量索引栏
- 操作栏
- 右侧操作按钮
- 设置多选框
- 设置显示数量索引
- 设置列表数据地址
- 直接设置数据
- 关闭ajax获取数据功能
- 设置分页
- 自动新增
- 自动编辑
- 图表(Charts)
- Html
- Iframe
- 数据面板
- 卡片列表
- 按钮(Button)
- 按钮调用示例
- 自定义组件
- 混合页面
- 概念说明
- 扩展
- 图标扩展
- 杂项
- 帮助函数
- TODO