分享

写回答

发帖

[提问] 很实用的重写规则,怎样以用户名做二级域名简化网址!

回答|共 21 个

sharesun

发表于 2010-7-17 13:26:15 | 显示全部楼层

可以用框架引用,再根据请求的域名判断并引用指定地址或直接跳到指定地址,需新建一个子目录的站点,绑定的域名如:go.abc.com,所有会员的二级域名做cname到go.abc.com,然后把下面的代码另存成首页(index.html)应该就能实现你的想法,代码如下:

<SCRIPT language="JavaScript">
var urls = document.domain;
var newurls = "Nofind.php";
var titles = "会员页面的名称";
var types = 0;

if (urls.indexOf("xyz.abc.com") > -1)
{
        newurls = "http://www.abc.com/wd/index.php?shopid=5&domain=xyz";
        titles = "XYZ页面的标题";
}

else if (urls.indexOf("wxyz.abc.com") > -1)
{
        newurls = "http://www.abc.com/wd/index.php?shopid=15&domain=wxyz";
        titles = "wxyz页面的标题";
        types = 0; //如果加了这个,那访问wxyz.abc.com时地址栏会直接跳转到上面的详细页地址,如果不加则一直显示wxyz.abc.com
}

if (parseInt(types,10) == 1)
{
        window.location.href = newurls
}
else
{
        document.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
        document.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
        document.write("<head>");
        document.write("<meta http-equiv=\"Content-types\" content=\"text/html; charset=utf-8\" />");
        document.write("<title>" + titles + "</title>");
        document.write("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=7\" />");
        document.write("<style types=\"text/css\">");
        document.write("html {overflow-x:hidden; overflow-y:auto; margin:0px; padding:0px;}");
        document.write("</style>");
        document.write("</head>");
        document.write("<FRAMESET id=attachucp border=0 frameSpacing=0 rows=* frameBorder=no cols=*>");
        document.write("<FRAME border=\"0\" name=\"mainFrame\" src=\"" + newurls + "\" noResize scrolling=\"auto\">");
        document.write("</FRAMESET>");
        document.write("<noframes>");
        document.write("<META HTTP-EQUIV=\"refresh\" CONTENT=\"1; URL=Nofind.php\">");
        document.write("</noframes>");
        document.write("</html>")
}
</script>


当然了,现在这个是html静态页面,如果查看源文件就是看到你所有的会员地址,可以使用php或asp显示单个会员的代码,再高级点,用数据库保存二级域名和对应的详细页面地址,这样看源文件时也就只能看到当时访问的这个会员的地址了。希望你能看明白,呵呵。

[ 本帖最后由 sharesun 于 2010-7-17 01:30 PM 编辑 ]

评分

参与人数 1威望 +2 金币 +5 收起 理由
add.c + 2 + 5 助人为乐

查看全部评分

zstxt1989

发表于 2010-7-17 15:11:26 | 显示全部楼层

编辑.HTACCESS
  1. # 将 RewriteEngine 模式打开,如果已经有rewriteEngine on这句,可以删除。
  2. rewriteEngine on
  3. RewriteBase /
  4. RewriteRule ^(.+)\.abc\.com$ www\.abc\.com\/wd\/index\.php\?shopid=5\&domain=$1
复制代码
说明:
后面的$1是匹配前面的(.+)也就是 xxx.abc.com中的xxx部分。abc可以替换成自己的域名。
不保证正确,试试看

[ 本帖最后由 zstxt1989 于 2010-7-17 03:14 PM 编辑 ]

评分

参与人数 1威望 +2 金币 +3 收起 理由
add.c + 2 + 3 助人为乐

查看全部评分

gooday

发表于 2010-7-17 17:39:58 | 显示全部楼层

问一句,是不是必须是独立IP的主机啊?

wylb

发表于 2010-7-17 18:02:18 | 显示全部楼层

感谢11#、12#及版主不吝赐教,测试暂未成功。我用的是子域名,同时也不是独立IP,泛解析有问题,在找原因,望大家继续指导,谢谢!

shlook

发表于 2010-7-18 09:15:15 | 显示全部楼层

这个二级域名是程序自带的功能,比如discuz、ecmall等,需要你有独立IP能做泛解析才可以使用的。

wylb

发表于 2010-8-22 09:36:36 | 显示全部楼层

大致清楚了。分为服务器和虚拟主机两种情况,都能实现。
1、针对服务器。超简单的二级域名自动开设(原文地址:http://www.8fcs.com/thread-2017-1-1.html)
不用操作IIS就可以让你的UCHOME会员拥有个性的二级域名,超简单。
首先必须你域名支持泛域名解析,也就是*.yoururl.com解析到你服务器IP上,再在空间上梆定这个泛域名,就可以使用以下代码去组建你的无限二级域名了,当然要合理放置到你的UCHOME源码中去才能实现更好的体念了,这是我在编写别的程序时用到的,感觉用在UCHOME里也挺不错的,比起原来的二级域名程序方便多了
PS:如何绑定泛域名?
域名: *.yoururl.com 解析到服务器IP
IIS 站点属性=》网站=》IP地址=》高级 添加一个主机头,主机头处留空就可以了,如果服务器有多个站点,就有 ISAPI筛选器 自定义一个规则即可。

----------------------------------------------
<?php
//二级域名检查函数
function callhost($host='') {
global $_config,$_SERVER;
    $This_URL_host = !empty($host) ? $host : $_SERVER['HTTP_HOST'];//获取网址
        //strpos($This_URL_host, '.')
    $URLhost_array = substr_count($This_URL_host,".")==2 ? explode('.', $This_URL_host) : '';//分割网址为数组
    $URLhost_names = is_array($URLhost_array) ? $URLhost_array[0] : '';//获取主机头
    $No_host_array = array('www','kl3w','club','home');//禁止使用的主机头列表
    if(preg_match("/^[a-zA-Z0-9_-]{4,10}+$/",$URLhost_names) && !in_array($URLhost_names,$No_host_array)){
           return $URLhost_names;//返回主机头名
    }else{
       return false;//不是主机头
    }
}

$str='';//输入要开设的二级域名ww_w.kl3w.com
$hostname=callhost($str);//不输入参数,则直接获取当前URL地址分析
if($hostname){
echo "<hr>";//这里你想用来干啥就干啥咯
echo '<font color="#009900">有效的自定义 '.$hostname.' 主机头</font>';
}else{
echo "<hr>";//这里你想用来干啥就干啥咯
echo '<font color="#FF0000">无效的自定义 '.$str.' 主机头</font>';
}
?>
---------------------------------------
2、针对虚拟主机。通过.htaccess301转向伪转发,具体做**坛中有,有无独立IP都可以,只是独立IP支持泛域名解析可直接在.htaccess中定义,无独立IP的还需要手工逐个绑定。

[ 本帖最后由 wylb 于 2010-8-22 09:38 AM 编辑 ]

wylb

发表于 2010-8-22 12:04:23 | 显示全部楼层

一并贴上,来自网络
首先,你要拥有一个有泛域名解析的顶级域名,例如: domain.com

其次,在 httpd.conf 中打开 mod_rewrite

之后,在 httpd.conf 的最后,添加以下内容:

RewriteEngine on

RewriteMap lowercase int:tolower

RewriteMap vhost txt:/usr/local/etc/apache/vhost.map

RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$

RewriteCond ${vhost:%1} ^(/.*)$

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

其中的 /usr/local/etc/apache 是你的 apache 服务器设置文件所在路径,根据实际情况更改。

然后,在这个所在路径的目录下创建一个文件: vhost.map

内容为:

www.domain.com /usr/local/www/data-dist/domain

bbs.domain.com /usr/local/www/data-dist/bbs

anyname.domain.com /usr/local/www/data-dist/anyname

以上部分都是:" 域名+空格+绝对路径" 的形式。

最后,在你的网站根目录 /usr/local/www/data-dist 下,创建对应目录:

domain , bbs , anyname 等等,理论上能无限。

这样,通过浏览器,访问 www.domain.com 时,实际上访问的就是 /usr/local/www/data-dist/domain目录下的文件。同理,访问 bbs.domain.com 实际上访问的就是 /usr/local/www/data-dist/bbs 目录下的文件。而且,你能

随时更改 vhost.map 来增加、删除、修改你的二级域名和所指向的实际路径,不用重启 apache。

add.c

发表于 2010-8-22 14:19:11 | 显示全部楼层

回复 17# 的帖子

你实验成功了?

ysxzx

发表于 2010-8-22 14:22:23 | 显示全部楼层

回复 1# 的帖子

.htaccess 可以不. 可以的话我帮你写个 .htaccess 的301

wylb

发表于 2010-8-23 19:18:43 | 显示全部楼层

可以实现了,用的蛮爽的,因为是虚拟主机,我用的就是 .htaccess 的301伪转发

[ 本帖最后由 wylb 于 2010-8-23 07:22 PM 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则