多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
使用入口文件的方式控制多站点,要添加一个站点,直接在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。