阿里云虚拟主机绑定多个网站及隐藏URL中的子目录名
首页,购买虚拟主机时,要选择Apache主机,而不要选择Ngnix主机,否则就无法绑定多个网站!另外,虚拟主机一般只能放一个MYSQL数据库,这里说的多网站是指静态网站或支持SQLITE数据库的网站,如Z-Blog、PbootCMS等建站系统。购买域名、备案、解析域名、绑定域名,这些操作就不说了,大家自行网上搜索教程来学习。
在虚拟主机的根目录下创建子目录(如web),然后将网站文件FTP上传到web目录下;
解析域名,并在虚拟主机后台绑定域名;
在网站根目录下创建文件:.htaccess,然后在里面粘贴如下内容来将域名绑定到目录(注意根据自己的情况修改下列域名和子目录名):
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www.)?域名$ RewriteCond %{REQUEST_URI} !^/子目录名/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /子目录名/$1 RewriteCond %{HTTP_HOST} ^(www.)?域名$ RewriteRule ^(/)?$ /子目录名/index.php [L]
如果是多个网站,上述代码可复制重复添加,注意修改里面域名和子目录名即可绑定多个网站;
设置好以后保存,就可以用域名访问你的网站了,但是有个问题就是域名后面始终带个“目录名”,如:http://www.域名/目录名/,如果放在普通服务器里则无此问题,而在虚拟空间里这个问题就一直存在,如果是旧站迁移过来,则原来的网站链接访问时会出错,导致搜索引擎需要重新收录或增加跳出率,所以这个问题必须想办法解决;
如果是Z-Blog程序,则可以按此方法解决:https://bbs.zblogcn.com/thread-105336.html,用“沉冰浮水”的方法就可以完美解决;而如果是Discuz或其它程序,则可能要想办法隐藏后面这个目录名,方法如下:
打开网站子目录,在子目录下创建文件:.htaccess,然后在里面粘贴如下内容来隐藏子目录(注意根据自己的情况修改下列域名和子目录名):
RewriteEngine On RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+目录名/([^\s]+) [NC] RewriteRule ^ %1 [R=301,L] # 如果相关内容链接打开出错时可去掉下两行 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (?!^目录名/)^(.*)$ /目录名/$1 [L,NC]
做完上面这步后,再去测试发现链接里的“目录名”已经被隐藏并可正常访问了,至此虚拟主机绑定域名到子目录并隐藏URL中的子目录名就搞定了!但是,新的问题出现了:前台用户无法登录,但可以登录后台,然后前台也会自动登录,对于只发布信息,不要求用户发帖的站点,只能这样用了;如果需要用户发帖,那就不能使用这个规则,搜索了很长时间无解,最好还是建议购买服务器来使用。
如果要使用301跳转,可以在虚拟主机管理后台绑定域名后,在“基础环境设置”——“301重定向”里选择添加;也可以使用代码,将下列代码放入根目录的.htaccess文件中:
# 301重定向: RewriteCond %{HTTP_HOST} ^访问域名 [NC] RewriteRule ^(.*)$ http://目标域名/$1 [L,R=301]
还有一些人使用下面代码来绑定目录,亲测可用,但不能隐藏子目录名,对绑定目录要求不高的情况下可以使用,根目录下.htaccess内容:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^二级域名$ [NC] RewriteCond %{REQUEST_URI} !^/目录名 RewriteRule ^(.*)$ /目录名/$1 [L] </IfModule>
子目录下.htaccess内容:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} !^二级域名$ [NC] RewriteRule (.*) http://二级域名/$1 [L,R=301] </IfModule>
本站原创,转载请注明出处,否则勿转!
扫描二维码推送至手机访问。
版权声明:本文由 声光视趣 - lavfun.com 发布,如需转载请注明出处。