phpwind转discuz 伪静态规则 for lighttpd
[
2010/01/19 00:27 | by suibing ]
2010/01/19 00:27 | by suibing ]
论坛转换后原先链接均失效,因此需要重新书写伪静态规则,保证原先连接正常。
url.rewrite= (
"^/archiver/((fid|tid)-[\w\-]+\.html)$" => "archiver/index.php?$1",
"^/forum-([0-9]+)-([0-9]+)\.html$" => "forumdisplay.php?fid=$1&page=$2",
"^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$" => "viewthread.php?tid=$1&extra=page=$3&page=$2",
"^/space-(username|uid)-(.+)\.html$" => "space.php?$1=$2",
"^/tag-(.+)\.html$" => "tag.php?name=$1",
"^(.*)/read-htm-tid-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2",
"^(.*)/read\.php\?tid-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2",
"^(.*)/thread-htm-fid-([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2",
"^(.*)/thread-htm-fid-([0-9]+)-type-([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2&filter=type&typeid=$3",
"^(.*)/thread-htm-fid-([0-9]+)-search-digest\.html$" => "$1/forumdisplay.php?fid=$2&filter=digest",
"^(.*)/profile-htm-action-show-(username|uid)-(.*)\.html$" => "$1/space.php?action=viewpro&$2=$3",
"^(.*)/thread-htm-fid-([0-9]+)([a-z\-]+)([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2&page=$4",
"^(.*)/read-htm-tid-([0-9]+)-page-([0-9]+)-fpage-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2&extra=page%3D1&page=$3",
"^(.*)/read\.php\?tid=([0-9]+)$" => "$1/viewthread.php?tid=$2",
"^(.*)/thread\.php\?fid=([0-9]+)$" => "$1/forumdisplay.php?fid=$2",
"^(.*)/thread\.php\?fid=([0-9]+)&type=([0-9]+)$" => "$1/forumdisplay.php?fid=$2&filter=type&typeid=$3",
"^(.*)/thread\.php\?fid=([0-9]+)&search=digest$" => "$1/forumdisplay.php?fid=$2&filter=digest",
"^(.*)/simple/index\.php\?(t|f)([0-9]+\.html)$" => "$1/archiver/?$2id-$3",
"^(.*)/profile\.php\?action=show&(username|uid)=(.*)$" => "$1/space.php?action=viewpro&$2=$3",
"^(.*)/thread\.php\?fid=([0-9]+)([a-zA-Z=&]+)([0-9]+)$" => "$1/forumdisplay.php?fid=$2&page=$4",
"^(.*)/read\.php\?tid=([0-9]+)&page=([0-9]+)&fpage=([0-9]+)$" => "$1/viewthread.php?tid=$2&extra=page%3D1&page=$3",
)
url.rewrite= (
"^/archiver/((fid|tid)-[\w\-]+\.html)$" => "archiver/index.php?$1",
"^/forum-([0-9]+)-([0-9]+)\.html$" => "forumdisplay.php?fid=$1&page=$2",
"^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$" => "viewthread.php?tid=$1&extra=page=$3&page=$2",
"^/space-(username|uid)-(.+)\.html$" => "space.php?$1=$2",
"^/tag-(.+)\.html$" => "tag.php?name=$1",
"^(.*)/read-htm-tid-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2",
"^(.*)/read\.php\?tid-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2",
"^(.*)/thread-htm-fid-([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2",
"^(.*)/thread-htm-fid-([0-9]+)-type-([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2&filter=type&typeid=$3",
"^(.*)/thread-htm-fid-([0-9]+)-search-digest\.html$" => "$1/forumdisplay.php?fid=$2&filter=digest",
"^(.*)/profile-htm-action-show-(username|uid)-(.*)\.html$" => "$1/space.php?action=viewpro&$2=$3",
"^(.*)/thread-htm-fid-([0-9]+)([a-z\-]+)([0-9]+)\.html$" => "$1/forumdisplay.php?fid=$2&page=$4",
"^(.*)/read-htm-tid-([0-9]+)-page-([0-9]+)-fpage-([0-9]+)\.html$" => "$1/viewthread.php?tid=$2&extra=page%3D1&page=$3",
"^(.*)/read\.php\?tid=([0-9]+)$" => "$1/viewthread.php?tid=$2",
"^(.*)/thread\.php\?fid=([0-9]+)$" => "$1/forumdisplay.php?fid=$2",
"^(.*)/thread\.php\?fid=([0-9]+)&type=([0-9]+)$" => "$1/forumdisplay.php?fid=$2&filter=type&typeid=$3",
"^(.*)/thread\.php\?fid=([0-9]+)&search=digest$" => "$1/forumdisplay.php?fid=$2&filter=digest",
"^(.*)/simple/index\.php\?(t|f)([0-9]+\.html)$" => "$1/archiver/?$2id-$3",
"^(.*)/profile\.php\?action=show&(username|uid)=(.*)$" => "$1/space.php?action=viewpro&$2=$3",
"^(.*)/thread\.php\?fid=([0-9]+)([a-zA-Z=&]+)([0-9]+)$" => "$1/forumdisplay.php?fid=$2&page=$4",
"^(.*)/read\.php\?tid=([0-9]+)&page=([0-9]+)&fpage=([0-9]+)$" => "$1/viewthread.php?tid=$2&extra=page%3D1&page=$3",
)
如何在vc里创建动态多维数组。。。
[
2010/01/15 09:41 | by suibing ]
2010/01/15 09:41 | by suibing ]
如何在VC中创建动态数组
关键词: VC 动态数组
怎样给多维数组动态分配内存
//Allocate:
int **p = new int* [m];
for(int i = 0 ; i < m ; i++)
p[i] = new int[n];
//Use:
for(int i = 0 ; i < m; i++)
for(int j = 0 ; j < n ; j++)
p[i][j] = i * j;
//Free:
for(int i = 0 ; i < m ; i++)
delete[] p[i];
delete[] p;
1. 演示形为int[2][3]的二维动态数组
///////////////////////////////////////////////////////////////////
int n1, n2;
const int DIM1 = 2;
const int DIM2 = 3;
// 构造数组
int **ppi = new int*[DIM1];
for(n1 = 0; n1 < DIM1; n1++)
{
ppi[n1] = new int[DIM2];
}
// 填充数据
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
ppi[n1][n2] = n1 * 10 + n2;
}
}
// 输出
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
afxDump << "ppi[" << n1 << "][" << n2 << "] = "
<< ppi[n1][n2] << "\n";
}
}
// 释放数组
for(n1 = 0; n1 < DIM1; n1++)
{
delete [] ppi[n1];
}
delete [] ppi;
2. 三维动态数组(int[2][3][4])
///////////////////////////////////////////////////////////////////
int n1, n2, n3;
const int DIM1 = 2;
const int DIM2 = 3;
const int DIM3 = 4;
// 构造数组
int ***ppi = new int**[DIM1];
for(n1 = 0; n1 < DIM1; n1++)
{
ppi[n1] = new int*[DIM2];
for(n2 = 0; n2 < DIM2; n2++)
{
ppi[n1][n2] = new int[DIM3];
}
}
// 填充数据
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
for(n3 = 0; n3 < DIM3; n3++)
{
ppi[n1][n2][n3] = n1 * 100 + n2 * 10 + n3;
}
}
}
// 输出
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
for(n3 = 0; n3 < DIM3; n3++)
{
afxDump << "ppi[" << n1 << "][" << n2 << "][" << n3 << "] = "
<< ppi[n1][n2][n3] << "\n";
}
}
}
// 释放数组
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
delete [] ppi[n1][n2];
}
delete [] ppi[n1];
}
delete [] ppi;
vector arr(10);这里是构造函数。
嵌套在类里的类型,他的构造函数应该在类的构造函数的前导中完成。
改成:
#include
#include
using namespace std;
class a
{
public:
vector arr;
a():arr(10){}
};
int main(int argc, char *argv[])
{
return 0;
}
这样应该就可以了
你可以使用指针来实现,这样来做:
如果是一维的,
int *arr; //可以是其它类型 (char, float...)
arr = new int[n]; //n 必须是整型变量
二维的呢,这样来,
int **arr;
int N,M;
cin >> N >> M;
arr = new int*[N];
for(int i=0;i 上面的代码就可以通过动态输入N,M来实现二维数组的定义
关键词: VC 动态数组
怎样给多维数组动态分配内存
//Allocate:
int **p = new int* [m];
for(int i = 0 ; i < m ; i++)
p[i] = new int[n];
//Use:
for(int i = 0 ; i < m; i++)
for(int j = 0 ; j < n ; j++)
p[i][j] = i * j;
//Free:
for(int i = 0 ; i < m ; i++)
delete[] p[i];
delete[] p;
1. 演示形为int[2][3]的二维动态数组
///////////////////////////////////////////////////////////////////
int n1, n2;
const int DIM1 = 2;
const int DIM2 = 3;
// 构造数组
int **ppi = new int*[DIM1];
for(n1 = 0; n1 < DIM1; n1++)
{
ppi[n1] = new int[DIM2];
}
// 填充数据
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
ppi[n1][n2] = n1 * 10 + n2;
}
}
// 输出
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
afxDump << "ppi[" << n1 << "][" << n2 << "] = "
<< ppi[n1][n2] << "\n";
}
}
// 释放数组
for(n1 = 0; n1 < DIM1; n1++)
{
delete [] ppi[n1];
}
delete [] ppi;
2. 三维动态数组(int[2][3][4])
///////////////////////////////////////////////////////////////////
int n1, n2, n3;
const int DIM1 = 2;
const int DIM2 = 3;
const int DIM3 = 4;
// 构造数组
int ***ppi = new int**[DIM1];
for(n1 = 0; n1 < DIM1; n1++)
{
ppi[n1] = new int*[DIM2];
for(n2 = 0; n2 < DIM2; n2++)
{
ppi[n1][n2] = new int[DIM3];
}
}
// 填充数据
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
for(n3 = 0; n3 < DIM3; n3++)
{
ppi[n1][n2][n3] = n1 * 100 + n2 * 10 + n3;
}
}
}
// 输出
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
for(n3 = 0; n3 < DIM3; n3++)
{
afxDump << "ppi[" << n1 << "][" << n2 << "][" << n3 << "] = "
<< ppi[n1][n2][n3] << "\n";
}
}
}
// 释放数组
for(n1 = 0; n1 < DIM1; n1++)
{
for(n2 = 0; n2 < DIM2; n2++)
{
delete [] ppi[n1][n2];
}
delete [] ppi[n1];
}
delete [] ppi;
vector
嵌套在类里的类型,他的构造函数应该在类的构造函数的前导中完成。
改成:
#include
#include
using namespace std;
class a
{
public:
vector
a():arr(10){}
};
int main(int argc, char *argv[])
{
return 0;
}
这样应该就可以了
你可以使用指针来实现,这样来做:
如果是一维的,
int *arr; //可以是其它类型 (char, float...)
arr = new int[n]; //n 必须是整型变量
二维的呢,这样来,
int **arr;
int N,M;
cin >> N >> M;
arr = new int*[N];
for(int i=0;i
AutoVPN修正版--web管理
[
2010/01/07 08:58 | by suibing ]
2010/01/07 08:58 | by suibing ]
这几天没事,把AutoVPN升级了一下,因为手工加用户太麻烦,
所以采用pptpd+freeradius+mysql,通过WEB管理
大家只要把vpn目录,复制到有PHP的主机上就可以管理了,因为水平有限,
所以做的页面都很简单
此可以用于游戏VPN,和和,大家也可以修改一下网页,
记得发一份给我噢:mailto:h3ewhack@163.com
login截图
admin截图
官方地址:
http://code.google.com/p/autosetup
下载地址:
http://www.namipan.com/d/2cce800e6dcdfa5b15507c14a0ae6d69e853ed8b00206b01
所以采用pptpd+freeradius+mysql,通过WEB管理
大家只要把vpn目录,复制到有PHP的主机上就可以管理了,因为水平有限,
所以做的页面都很简单
此可以用于游戏VPN,和和,大家也可以修改一下网页,
记得发一份给我噢:mailto:h3ewhack@163.com
login截图
admin截图
官方地址:
http://code.google.com/p/autosetup
下载地址:
http://www.namipan.com/d/2cce800e6dcdfa5b15507c14a0ae6d69e853ed8b00206b01
OPENVPN使用PAM及MYSQL进行用户认证
[
2010/01/07 08:56 | by suibing ]
2010/01/07 08:56 | by suibing ]
1.使用PAM模块
PAM简介:
Pluggable Authentication Module (PAM) 是行业标准验证框架。
PAM 为系统管理员提供了选择系统上可用的任何验证服务来执行验证的灵活性。使用 PAM 框架还可以插入新的验证服务模块,并且无需修改应用程序即可使用,
包含帐户管理,用户验证,口令管理,会话管理四个模块.指定如何处理同一个 service-name 和 module-type 的多个定义的关键字。它为下列值之一
required模块测试必须成功。
optional模块测试可以失败。
sufficient如果测试成功,则不执行进一步的测试。
1>OPENVPN服务器端配置:
plugin /usr/sharelib/openvpn-auth-pam.so login //指定模块的位置,该动态链接库在OPENVPN发生包里需要编译
client-cert-not-required //客户端数字证书无需指定
username-as-common-name //用户名作为common name
2>OPENVPN客户端配置:
auth-user-pass
3>服务器设置:
需要增加相应的用户名及密码,使用useradd password命令
重新启动OPENVPN,则在客户端登录OPENVPN的时候会提示输入用户名及密码
2.使用PAM-MYSQL
1>安装MYSQL,添加用户名vpn 密码设置为vpn,用户表为库openvpn中的user
2>安装pam_mysql ,下载位置http://internap.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz
3>配置pam配置文件,在/etc/pam.d中新建openvpn内容如下
auth required pam_mysql.so user=vpn passwd=vpn host=192.168.1.11 db=openvpn table=user usercolumn=username
passwdcolumn=password
account required pam_mysql.so user=vpn passwd=vpn host=192.168.1.11 db=openvpn table=user usercolumn=username
passwdcolumn=password
注意:将pam_mysql.so文件拷入 /lib/security/位置;并且保证系统中有libmysqlclient.so文件,如果连接远程MYSQL数据库无需此文件
4>OPENVPN服务器配置
plugin /usr/sharelib/openvpn-auth-pam.so openvpn 其余配置与上同//加载/etc/pam.d/openvpn配置文件
5>客户端配置与上同
PAM简介:
Pluggable Authentication Module (PAM) 是行业标准验证框架。
PAM 为系统管理员提供了选择系统上可用的任何验证服务来执行验证的灵活性。使用 PAM 框架还可以插入新的验证服务模块,并且无需修改应用程序即可使用,
包含帐户管理,用户验证,口令管理,会话管理四个模块.指定如何处理同一个 service-name 和 module-type 的多个定义的关键字。它为下列值之一
required模块测试必须成功。
optional模块测试可以失败。
sufficient如果测试成功,则不执行进一步的测试。
1>OPENVPN服务器端配置:
plugin /usr/sharelib/openvpn-auth-pam.so login //指定模块的位置,该动态链接库在OPENVPN发生包里需要编译
client-cert-not-required //客户端数字证书无需指定
username-as-common-name //用户名作为common name
2>OPENVPN客户端配置:
auth-user-pass
3>服务器设置:
需要增加相应的用户名及密码,使用useradd password命令
重新启动OPENVPN,则在客户端登录OPENVPN的时候会提示输入用户名及密码
2.使用PAM-MYSQL
1>安装MYSQL,添加用户名vpn 密码设置为vpn,用户表为库openvpn中的user
2>安装pam_mysql ,下载位置http://internap.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz
3>配置pam配置文件,在/etc/pam.d中新建openvpn内容如下
auth required pam_mysql.so user=vpn passwd=vpn host=192.168.1.11 db=openvpn table=user usercolumn=username
passwdcolumn=password
account required pam_mysql.so user=vpn passwd=vpn host=192.168.1.11 db=openvpn table=user usercolumn=username
passwdcolumn=password
注意:将pam_mysql.so文件拷入 /lib/security/位置;并且保证系统中有libmysqlclient.so文件,如果连接远程MYSQL数据库无需此文件
4>OPENVPN服务器配置
plugin /usr/sharelib/openvpn-auth-pam.so openvpn 其余配置与上同//加载/etc/pam.d/openvpn配置文件
5>客户端配置与上同
SSL-Explorer
[
2010/01/07 08:55 | by suibing ]
2010/01/07 08:55 | by suibing ]
今天无聊不小心发现SSL-Explorer - Web Based SSL VPN. 它分二个版本付费的Enterprise Edition, Free的Community Edition.
可能因為有Commercial版本, 所以它有几个好处:
安装简单
文件"看起来"很完整, 有时还有Flash Demo教学
即使是Commuity Edition, 除了有Unix版本, 还有Windows版本
UI看起来很有质感
Fedora下安装步骤:
需要装apache ant: yum install ant-* => 就算动都装好了
安装JDK http://java.sun.com/j2se/1.5.0/download.jsp.
开始安装:
# tar zxvf sslexplorer-0.2.8_01-src.tar.gz
# cd sslexplorer-0.2.8_01/
# export JAVA_HOME=/usr/java/jdk1.5.0_09/
# ant install
开始自动安装... 会停在...
[java] .....Point your browser to http://:28080.
打开Browser输入http://:28080 开始做Configuration
目前我测只能用Build-in User Database, AD及Unix这二种我还设不起来, 要再研究.
其它就step-by-step很容易就设完了.
# ant install-service
之后要啟动SSL-Explorer
# /etc/init.d/sslexplorer start
这样就装好了
开始使用, 直接以Browser连至https://you_host_name, 以Super User进去设定Resource及policy
一般User也都直接以Browser连至https://your_host_name 即可开始使用.
使用心得:
就我一个无法无天的工程师而言, 用起来有点绑手绑脚. 不过这本来就是SSL VPN的特色, 做到Application的限制, 而且就一个严谨的IT管理, 这是应该的. 像ssh, 它就机车到一定要事先设定User Account, 所以就是你login的session name, 如果我SSL VPN是用tester登录, 我以SSH进入后端主机就不能用其它名字
它有付费及Free, 当然会有些功能无法在Free版本中使用, ex: Radius Authentication, Exchange, 不过如果可以用UNIX, AD, 其实Radius就还好, Exchange也可以用OWA解决
Available Resource:
Web Forward
Network Place
Application
SSL-Tunnel
Profile
Network Extension
目前试过的Resource:
ssh
vnc
web: ex: intranet web site, Exchange OWA,
其它当然还有CIFS, SMB等功能, 我还没试. Web又分好几种, 还要再细看Document, 才能好好善用.
其实整体用起来还不错, 我想50人内的小公司很适合.... 重点是... Free... 又可以access from any where.. 只要你有Browser.
可能因為有Commercial版本, 所以它有几个好处:
安装简单
文件"看起来"很完整, 有时还有Flash Demo教学
即使是Commuity Edition, 除了有Unix版本, 还有Windows版本
UI看起来很有质感
Fedora下安装步骤:
需要装apache ant: yum install ant-* => 就算动都装好了
安装JDK http://java.sun.com/j2se/1.5.0/download.jsp.
开始安装:
# tar zxvf sslexplorer-0.2.8_01-src.tar.gz
# cd sslexplorer-0.2.8_01/
# export JAVA_HOME=/usr/java/jdk1.5.0_09/
# ant install
开始自动安装... 会停在...
[java] .....Point your browser to http://:28080.
打开Browser输入http://:28080 开始做Configuration
目前我测只能用Build-in User Database, AD及Unix这二种我还设不起来, 要再研究.
其它就step-by-step很容易就设完了.
# ant install-service
之后要啟动SSL-Explorer
# /etc/init.d/sslexplorer start
这样就装好了
开始使用, 直接以Browser连至https://you_host_name, 以Super User进去设定Resource及policy
一般User也都直接以Browser连至https://your_host_name 即可开始使用.
使用心得:
就我一个无法无天的工程师而言, 用起来有点绑手绑脚. 不过这本来就是SSL VPN的特色, 做到Application的限制, 而且就一个严谨的IT管理, 这是应该的. 像ssh, 它就机车到一定要事先设定User Account, 所以就是你login的session name, 如果我SSL VPN是用tester登录, 我以SSH进入后端主机就不能用其它名字
它有付费及Free, 当然会有些功能无法在Free版本中使用, ex: Radius Authentication, Exchange, 不过如果可以用UNIX, AD, 其实Radius就还好, Exchange也可以用OWA解决
Available Resource:
Web Forward
Network Place
Application
SSL-Tunnel
Profile
Network Extension
目前试过的Resource:
ssh
vnc
web: ex: intranet web site, Exchange OWA,
其它当然还有CIFS, SMB等功能, 我还没试. Web又分好几种, 还要再细看Document, 才能好好善用.
其实整体用起来还不错, 我想50人内的小公司很适合.... 重点是... Free... 又可以access from any where.. 只要你有Browser.





