Total Pageviews

Saturday, 6 April 2013

利用.htaccess绑定域名到子目录



很多空间可以绑定多个域名,但是不让绑定子目录,很可惜吧,一个空间也只能做一个站了。像CPanle可以Parked Domain多个,但是不能Addon Domain就可惜了,还有GoDaddy的免费空间可以绑定多个域名,但都只能绑定到跟目录。要让这些空间绑定多个域名到子目录可以用.htaccess文件,代码如下:

    # 把 www.urdomain.com改为你要绑定的域名,把 wwwdir 改为要绑定的目录
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.urdomain.com$
    RewriteCond %{REQUEST_URI} !^/wwwdir/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /wwwdir/$1
    RewriteCond %{HTTP_HOST} ^www.urdomain.com$
    RewriteRule ^(/)?$ wwwdir/index.php [L]

将上面的代码保存在.htaccess文件中,上传到网站跟目录,再把相应的域名解析过来,生效后就OK了。

注:Windows上没法新建.htaccess文件,可以上传一个.txt文件到Linux服务器,然后再更名为.htaccess,再下载下来将代码粘贴进去。
------------------------------------------------
 想将主域名指向其中一个文件夹/目录,问我会不会弄,我随即就说通过.htaccess重写就可以了,虽然对.htaccess有一定的了解,可是真正要实现这个功能的重写,还不知道具体怎么实现,尝试了几次都出现这样或那样的问题。无奈中~~只好上网寻找答案~~

找这种答案还是很容易的,很快就在HostMonster的知识库里找到了,那里有一篇文章专门写-如何用.htaccess重写将域名指向一个子目录

在虚拟主机中,主域名是使用public_html目录/文件夹作为主域名的缺省目录,主域名网站的文件和程序都是放在public_html目录下,附加的域名(addon domains)使用public_html目录/文件夹下的子目录/子文件夹。有的人可能觉得public_html目录/文件夹下的会看起来比较乱,因此想把主域名也指向其中一个子目录/文件夹。这样就需要利用.htaccess的重写功能。

具体的写法如下:

    # .htaccess main domain to subfolder redirect
    # Copy and paste the following code into the .htaccess file
    # in the public_html folder of your hosting account
    # make the changes to the file according to the instructions.

    # Do not change this line.

    RewriteEngine on

    # Change yourdomain.com to be your main domain.

    RewriteCond %{HTTP_HOST} ^(www.)?yourmaindomain.com$

    # Change ’subfolder’ to be the folder you will use for your main domain.

    RewriteCond %{REQUEST_URI} !^/subfolder/

    # Don’t change this line.

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Change ’subfolder’ to be the folder you will use for your main domain.

    RewriteRule ^(.*)$ /subfolder/$1

    # Change yourdomain.com to be your main domain again.
    # Change ’subfolder’ to be the folder you will use for your main domain
    # followed by / then the main file for your site, index.php, index.html, etc.

    RewriteCond %{HTTP_HOST} ^(www.)?yourmaindomain.com$
    RewriteRule ^(/)?$ subfolder/index.php [L]
------------------------------------------------------------------

通过.htaccess绑定域名到网站子目录     

国内虚拟主机商一般一个主机只提供1个域名绑定,且不支持子域名。这时候我们可以通过.htaccess文件设置重定向,把二级或者其他域名绑定到网站空间指定的子目录。
先把要绑定的域名A记录或CNAME指向空间所在的主机IP,然后可以.htaccess通过如下代码绑定到相应文件夹:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^SLD.domain.com$

RewriteCond %{REQUEST_URI} !^/Catalog/

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /Catalog/$1

RewriteCond %{HTTP_HOST} ^SLD.domain.com$

RewriteRule ^(/)?$ Catalog/index.php [L]

如果很多个二级域名都指定的话,每个都这么写.htaccess文件就会非常庞大臃肿,可以使用以下正则匹配写法:

RewriteCond %{HTTP_HOST} ^(SLD1|SLD2|SLD3).domain.com$
RewriteRule ^(.*)$ /%1/$1 [L, NC]

这样,会自动把SLD1对应到Catalog1目录,SLD2对应到Catalog2目录,SLD3对应到Catalog3,要加新的域名时,只需要在上面按格式添加即可。