使用入口文件的方式控制多站點,要添加一個站點,直接在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