本文安装过程中是为了将subversion集成到apache环境中,采用apache作为subversion的服务器,访问版本库的方式是:http://localhost/svn ,如若想采用svn://localhost/svn,请参考 搭建SVN环境
安装前的准备工作
1、WAMP环境已经就绪或者确认已经安装过apache
2、下载相关安装软件,subversion 1.6.6 / TortoiseSVN 1.6.6 (两个程序的版本最好对应,因为只是上传提交的话,T和S的版本不对应是可以的,但是如果使用T在S中建立版本库的话,必须对应,否则建立的版本库不能访问)
安装过程
1、 安装subversion 基本按照提示安装完毕即可,安装路径自己选择,最好选择同apache环境装到一个目录中,方便管理
2、基本配置
打开apache/conf/httpd.conf
找到以下两行,确认这两行是没有注释掉的,即不要在行开头有#号注释符
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
另外在LoadModule的最后,再添加两个模块,具体地址请根据自己安装情况调整
LoadModule dav_svn_module E:/webserver/Subversion/bin/mod_dav_svn.so
LoadModule authz_svn_module E:/webserver/Subversion/bin/mod_authz_svn.so
在最后添加如下内容,注意红色部分,修改成自己的路径,其中svndata是版本库根目录,建议采用这样的配置方式,可以方便管理多个版本库
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath E:\webserver\svndata
AuthType Basic
AuthName “Subversion svn”
AuthzSVNAccessFile E:\webserver\svndata\authz
AuthUserFile E:\webserver\svndata\passwd
Require valid-user
</location>
AuthzSVNAccessFile 中的authz的文件内容如下
[groups]
admin = admin
[/]
@admin=rw
[/demo]
@admin=r
groups是指用户组,自己可以选择是否分组用户,一般本地采用一个分组即可或者不采用分组均可,多人协作开发的话,建议分组
[/]是指版本库目录,自己可以设置不同用户对不同版本库的权限,设置是版本库的某个文件夹权限也可以设置,例如[demo:/abc]就是指demo库的abc文件夹
AuthUserFile 中的passwd的文件需要用apache的文件htpasswd.exe生成,打开cmd命令窗口
E:\webserver\Apache2.2\bin>htpasswd.exe -c E:/webserver/svndata admin
会提示输入密码,自行设置即可,这样就可以在相应的目录中生成passwd文件,打开后你可以看到 用户名:密码 形式
3、建立版本库
采用命令行方式,请参考 搭建SVN环境 ,现在说一下TortoiseSVN图形界面方式
在svndata文件夹下,新建立一个文件夹 demo,然后右键选择TortoiseSVN->在此创建版本库,okay,完成,对版本库的权限设置,请打开 E:/svndata/authz文件进行设置。
浏览版本库的方式,从系统浏览器打开 http://localhost/svn /demo 或者是用TortoseSVN自带的浏览器进行访问均可
说明:本文中提到的路径,请参照自己的情况进行设置
在windows配置PHP运行环境时,如果出现curl函数执行后无回应的情况,请先查看apache/logs目录中的error.log中的错误提示信息,如果提示Call to undefined function curl_init 则表明PHP的dll库没有被载入
检查步骤为
1、phpinfo 查看环境变量中PHP.ini的载入路径是否正确
2、检查php.ini中 extension=php_curl.dll 前面的分号一定要去掉
3、查看php/ext目录中是否存在 php_curl.dll 文件
4、将php/目录中的 libeay32.dll 和 ssleay32.dll 放到c:/windows/system32/下
5、重启apache
再测试,应该就可以了
正好下午完成了二级域名的事情,其实比想象中的要简单许多。
例子:
1、http://blogbus.blogbus.com/
2、http://music.google.cn/
大家大概都见过以上这种形式的域名,那么具体是怎么实现的呢?就PHP程序中涉及到得简单说一下
一、要做一个域名泛解析,就是说将 *.domain.com 解析到你的空间[服务器]上
二、要做一个服务器的泛解析,就apache来讲,要在apache的配置文件http.conf(具体的环境具体的文件名,自己注意下)中(直接添加到该配置文件的最后即可)
《VirtualHost *:80》
ServerAdmin jeccy@walleve.com
DocumentRoot /www/walleve
ServerName walleve.com
ServerAlias *.walleve.com
《/VirtualHost》
注意:将上面的《》替换成
三、rewrite 重写路径
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.walleve\.com$
RewriteRule ^/?$ /%{HTTP_HOST}
RewriteRule ^/([a-z0-9\-]+)\.walleve\.com/?$ /4.php?u=$1 [L]
#含义是 例如56.walleve.com,将隐式打开的是www.walleve.com/4.php?u=56这个页面
#注意:将这些放到一个.htaccess文件,然后放到网站根目录即可
#必须保证apache配置文件中的重写应用要打开
1、去掉LoadModule rewrite_module modules/mod_rewrite.so前面出现的#号,即去掉注释
2、AllowOverride none改为AllowOverride All,在http.conf文件中搜索即可找到,修改即可
#rewrite更多规则可以参考apache文档
除了应用重写规则,我们也可以在PHP程序中来处理这些事情,譬如康盛的产品程序中的这一段代码
//二级域名
if(!isset($_GET['do']) && $_SCONFIG['allowdomain']) {
$hostarr = explode(‘.’, $_SERVER['HTTP_HOST']);
$domainrootarr = explode(‘.’, $_SCONFIG['domainroot']);
if(count($hostarr) > 2 && count($hostarr) > count($domainrootarr) && $hostarr[0] != ‘www’ && !isholddomain($hostarr[0])) {
showmessage(‘enter_the_space’, $_SCONFIG['siteallurl'].’space.php?domain=’.$hostarr[0], 0);
}
}
注意:
第一步和第二步提到的泛解析问题,要注意的是如果我们做了真的做了 *.walleve.com的泛解析,那么任何二级域名,例如blog.walleve.com,就是之前我们做过的二级域名都将受到重写规则的影响,譬如我们之前的二级域名blog是解析到/www/walleve/blog目录的,那么做过以上三步之后,打开blog.walleve.com,实际打开的也是walleve.com/4.php?u=blog,所以我们最好在重写规则中来修改blog的重写或者是在第二步中修改服务器的泛解析,将第二步中的ServerAlias *.walleve.com改为我们想要的二级域名
参考资料:
http://faq.comsenz.com/viewnews-327