利用.htaccess文件规则将域名绑定至网站子目录
2011-07-10 18:07
众所周知,在linux空间中,通过.htaccess文件可以做许多事情,比较301重定向、自定义错误页访问、设置文件防盗链、设置默认页面等等,以上这些都是经常应用的。其实,.htaccess还有一个功能就是可以通过编写规则将域名绑定到网站的子目录,这对于那些使用虚拟主机而主机提供商不提供子目录绑定功能的用户来讲,无疑是一个利好消息。
之前在网络上搜索了一下关于将域名绑定至子目录的文章,经过实践发现,那些诸如“完美、轻松”绑定域名至网站子目录其实并非那么完美,他们之中的一部分所分享的方法是可以实现将域名绑定到子目录的,但也存在缺陷,那就是这种方法也仅仅只能访问子目录的首页,访问子目录下的其它文件以及其它文件都会出现500错误,没有真正实现将域名绑定至子目录的目的。对此,我总结了网络上的一些方法并加以实践验证后,将方法和规则分享出来,以供人之需,代码如下:
在网站目录下的.htaccess文件规则:
<IfModule mod_rewrite.c>
RewriteEngine On //开启URL重写引擎
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?abchina\.biz$ //网站的主域名,修改为自己的域名
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{HTTP_HOST} ^api\.abchina\.biz$ //域名到子目录的域名,根据自己的需要修改
RewriteCond %{REQUEST_URI} !^/api/ //api为需要绑定域名的子目录,填写相对路径
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /api/$1 //api为需要绑定域名的子目录,填写相对路径
RewriteCond %{HTTP_HOST} ^api\.abchina\.biz$
RewriteRule ^(/)?$ api/$1 [L] //域名到子目录的域名,根据自己的需要修改
</IfModule>
将以上代码保存为.htaccess文件放至网站根目录即可实现域名绑定至子目录,但尚缺完善,主要是通过以上方法只能实现域名访问子目录,而访问子目录下的子目录及以下文件时都会跳出500错误。经过实践验证,要解决此问题还需要在绑定域名的子目录再添加一个.htaccess文件,这个.htaccess文件的代码很简单,如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /api //对应根目录.htaccess文件中填写的子目录名
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1 [L]
</IfModule>