前言
apache 服务器发展已有多年,各大平台的虚拟主机大多都是以php,静态页面建站为主,所以大多也用的是apache来作为服务器应用,以阿里云为例,像http.conf配置文件就未给到用户自行修改配置。所以,虚拟主机的直接部署方便但也大大受限,不过好在伪静态这方面是默认开启的,那么我们就可以根据伪静态文件配置来做到一个虚拟主机同ip多个站点多域名配置
1. 参考目录,如下图
![](https://img.haomeiwen.com/i6332806/b30d6d123dba916b.png)
2. 规则书写
网站根目录下的.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]
RewriteCond %{HTTP_HOST} ^www.zkycsj.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /ks_project/public/$1 [QSA,PT,L]
ErrorDocument 403 403配置页面或跳转链接
ErrorDocument 404 404配置页面或跳转链接
ErrorDocument 500 500配置页面或跳转链接
</IfModule>
thinkphp的public文件夹下的.htaccess配置
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^虚拟主机已备案域名$ [NC]
RewriteCond %{REQUEST_URI} ^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg|\.xml)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./$1 [QSA,PT,L]
RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg|\.xml)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ ./index.php/$1 [QSA,PT,L]
</IfModule>
3.规则解读
- 判断虚拟主机的该模块是否开启并安装
<IfModule mod_rewrite.c></IfModule>
- 判断条件是否成立,相当于 if
RewriteCond (正则匹配)
- 域名后面的路由
%{REQUEST_URI}
- 请求的文件名
%{REQUEST_FILENAME}
- 重写的路由规则
RewriteRule (正则匹配转发的占位变量) (具体的转发路径 $1代表第一个正则匹配,可匹配 $1 - $9) (中括号中的值下一条详解)
- 中括号中的字母代表意思
-QSA 即qsappend 将来自原始请求URL的任何查询字符串追加到在重写目标中创建的任何查询字符串
-PT即passthrough 强制将结果URI传递回URL映射引擎,以处理其他URI到文件名的翻译器,例如Alias或 Redirect。
-L 即last 代表规则到这里终止,不在继续向下
-NC 即nocase 不区分大小写
-R=301/ R=302 临时重定向和永久重定向
网友评论