{ yeah : 必须哒 } No place to place should record our youth?

22Sep/103

2010中秋快乐!

Posted by alacner

【必须哒】创建以来过的第一个中秋节,愿天下所有pepole都能团团圆圆,幸福美满!

Tagged as: 3 Comments
16Sep/100

PHP5类实例教程【整理版】

Posted by alacner

看到一个类教程,感觉算是比较全面了,所以就整理成了word,需要的可以下载。

从OOP(面向对象)的视角看,不应区分语言。无论是C++、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OOP的真谛,便可以跨越语言,让你的思想轻松的跳跃。便没有对于Java、.net 、 PHP 之间谁强谁弱的争执了。

希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OOP的编程过程。

相对PHP4,PHP5在面向对象方面改变了很多。我们将只介绍PHP5环境下的面向对象。而我们必须改变自己来跟随PHP5的发展。如果代码结果在你的环境下执行不一致,请确认你的环境为PHP5。

我们假设读者没有任何面向对象的知识,即使你是第一次听说OOP,也可以读懂这文章。但我希望你必须对PHP有一些了解。

在后面我们将使用一些例子,来逐渐分析PHP5的OOP基础。

面向对象只解决了两个问题,代码的可扩展性、 代码的可维护性。

PHP5类实例教程

Tagged as: , , No Comments
15Sep/101

15 个一定要会的 Windows7 快捷键

Posted by ofeng

 

看到最后一个就决定转了:http://baoz.net/15-%E4%B8%AA%E4%B8%80%E5%AE%9A%E8%A6%81%E4%BC%9A%E7%9A%84-windows7-%E5%BF%AB%E6%8D%B7%E9%94%AE/

任何的操作系统、软件、游戏,只有熟练使用快捷键,才能最大效率的工作、娱乐,我们不能把所有的时间都浪费在一台机器上,这是不行的。快捷键带给我们的不只是快速,还能感受到机器带来的快感。很难想象一个不用键盘的魔兽争霸玩家。@Appinn

15 个一定要会的 Windows7 快捷键[图] | 小众软件 > pcskill

via GuidingTech

1. Ctrl + Shift + N – 创建一个新的文件夹

你需要在文件夹窗口中按 Ctrl + Shift + N 才行,在 Chrome 中是打开隐身窗口的快捷键。

2. Ctrl + Shift + 左键 – 用管理员权限打开程序 (Ctrl+Shift+Click to Open a Program As Administrator)

有些程序,需要右键选择 Windows7 的管理员权限才可以正常运行,而这个蛋疼的快捷键我没有测试成功,@sfufoet 在受限制帐户下测试的软件 AirVideoServer 可以在 Touch 上成功连接 AirVideoServer 并播放视频。

3. Shift+ 鼠标右键 – 增强版右键发送到

右键发送到 是一个很常用的功能,一般情况下可以发送到:桌面快捷方式、邮件联系人、压缩文档、移动设备等等。而通过 Shift+ 鼠标右键 的发送到,增加了 Windows7 个人文件夹内的所有内容,包括:我的文档、我的照片、我的音乐、桌面等等

15 个一定要会的 Windows7 快捷键[图] | 小众软件 > pcskill

4. Shift + 右键 – 在当前文件夹用命令行打开。

15 个一定要会的 Windows7 快捷键[图] | 小众软件 > pcskill

开始 > 运行 > cmd 就是命令行界面,传说中的 DOS 命令。最常用的可能就是 ping 了吧?用命令行来修改文件扩展名也是好办法,ren name.txt name.bat 就可以把一个文本文件改成批处理文件了。而 Shift + 右键在当前文件夹用命令行打开的作用就是不用频繁的 cd 打开各级文件夹了。

5. Win + 空格 – 闪现桌面

效果与鼠标停留在任务栏最右端相同,松开 Win 键即恢复窗口。恩,你可以用来看看桌面背景的美女。

6. Win+ 上/下/左/右 – 移动当前激活窗口

其中,Win +左/右 为移动窗口到屏幕两边,占半屏,Win + 上 为最大化当前窗口,下为恢复当前窗口

7. 针对双显示器: Win + Shift + 左 – 移动当前窗口到左边的显示器上

针对让人羡慕的双显示器,可以很方便的移动当前窗口到另外一个显示器上,比如把视频窗口移到一边去,还可以继续上网。

8. 针对双显示器: Win + Shift + 右 – 移动当前窗口到右边的显示器上

我认为是老外为了凑数才把这个快捷键单独列出来的。

9. Win + T – 显示任务栏窗口微缩图并回车切换

15 个一定要会的 Windows7 快捷键[图] | 小众软件 > pcskill

多按几次 T 可以在不同的任务栏窗口中显示,回车则切换。很方便的快捷键。切换窗口还可以用 Win + Tab。

10. Shift + 左键 – 在任务栏对已打开的程序/文件夹再打开一次

话比较绕,比如你对着任务栏里的 Chrome Shift + 左键 则会新打开一个窗口。而对着记事本按也会再打开一个记事本。

11. Win + B – 移动光标到系统托盘

针对键盘爱好者,不需要在狂按 TAB 键才切换到系统托盘了。Win + B 直达托盘,之后就可以用方向键控制了,也可以控制时间区域。

12. Win + P – 在显示器与投影间相互切换

13. Win + 1, Win + 2 – 在任务栏中快速切换程序

任务栏从左到右 1,2,3,快速切换用的。对当前窗口的作用是最小化,另外一个最小化快捷键是 Win + M

14. Win + Pause – 打开系统属性

通过开始菜单 > 计算机右键属性,是一个东西

15. Ctrl + Shift + Esc – 快速打开 Windows 任务管理器

俗话说最好的留在最后,自从升级 Windows7 后,想调用任务管理器,需要先 Ctrl + Alt + Del 标准快捷键,再点击任务管理器,并且屏幕还会被锁定。而今天才知道的 Ctrl + Shift + Esc 让我泪流满面啊。。。

15 个一定要会的 Windows7 快捷键[图] | 小众软件 > pcskill

11Sep/100

PHP5 面向对象程序设计之:this, self, parent, static

Posted by alacner

PHP5 是一具备了大部分面向对象语言的特性的语言,比PHP4 有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说

的不好,请高手见谅. (阅读本文,需要了解PHP5 的面向对象的知识)

首先我们来明白上面
PHP5 是一具备了大部分面向对象语言的特性的语言,比PHP4 有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说

的不好,请高手见谅. (阅读本文,需要了解PHP5 的面向对象的知识)

首先我们来明白上面三个关键字: this,self,parent,从字面上比较好理解,是指这,自己,父亲,呵呵,比较好玩了,我们先建立几个概念,这三个

关键字分别是用在什么地方呢?我们初步解释一下,this 是指向当前对象的指针(我们姑且用C 里面的指针来看吧),self 是指向当前类的指针

,parent 是指向父类的指针。我们这里频繁使用指针来描述,是因为没有更好的语言来表达,呵呵,语文没学好。 -_-#

这么说还不能很了解,那我们就根据实际的例子结合来讲讲。

(1)this
———— PHP代码 ————

1 2
3 class UserName
4 {
5     //定义属性
6     private $name;
7
8     //定义构造函数
9     function __construct( $name )
10    {
11         $this->name = $name; //这里已经使用了this 指针
12     }
13
14     //析构函数
15     function __destruct(){}
16
17     //打印用户名成员函数
18     function printName()
19     {
20         print( $this->name ); //又使用了this 指针
21     }
22 }
23
24 //实例化对象
25 $nameObject = new UserName( "heiyeluren" );
26
27 //执行打印
28 $nameObject->printName(); //输出: heiyeluren
29
30 //第二次实例化对象
31 $nameObject2 = new UserName( "PHP5" );
32
33 //执行打印
34 $nameObject2->printName(); //输出:PHP5
35 ?>
————————————

我们看,上面的类分别在11 行和20 行使用了this 指针,那么当时this 是指向谁呢?其实this 是在实例化的
时候来确定指向谁,比如第一次实例化对象的时候(25 行),那么当时this 就是指向$nameObject 对象,那么执
行18 行的打印的时候就把print( $this->name ),那么当然就输
出了"heiyeluren"。第二个实例的时候,print( $this->name )变成了print( $nameObject2->name ),
于是就输出了"PHP5"。所以说,this 就是指向当前对象实例的指针,不指向任何其他对象或类。

(2)self

首先我们要明确一点,self 是指向类本身,也就是self 是不指向任何已经实例化的对象,一般self 使用来指向类中的静态变量。
———— PHP代码 ————

1 2
3 class Counter
4 {
5     //定义属性,包括一个静态变量
6     private static $firstCount = 0;
7     private $lastCount;
8
9     //构造函数
10    function __construct()
11    {
12         $this->lastCount = ++self::$firstCount; //使用self 来调用静态变量,
//使用self 调用必须使用::(域运算符号)
13    }
14
15     //打印最次数值
16     function printLastCount()
17     {
18         print( $this->lastCount );
19     }
20 }
21
22 //实例化对象
23 $countObject = new Counter();
24
25 $countObject->printLastCount(); //输出 1
26
27 ?>
————————————
我们这里只要注意两个地方,第6 行和第12 行。我们在第二行定义了一个静态变量$firstCount,并且初始值为0,那么在12 行的时候调用了

这个值得,使用的是self 来调用,并且中间使用"::"来连接,就是我们所谓的域运算符,那么这时候我们调用的就是类自己定义的静态变量

$frestCount,我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使用this 来引用,可以使

用self 来引用,因为self是指向类本身,与任何对象实例无关。换句话说,假如我们的类里面静态的成员,我们也必须使用self

来调用。

(3)parent

我们知道parent 是指向父类的指针,一般我们使用parent 来调用父类的构造函数。

———— PHP代码 ————

1 2
3 //基类
4 class Animal
5 {
6     //基类的属性
7     public $name; //名字
8
9     //基类的构造函数
10     public function __construct( $name )
11     {
12         $this->name = $name;
13     }
14 }
15
16 //派生类
17 class Person extends Animal //Person 类继承了Animal 类
18 {
19     public $personSex; //性别
20     public $personAge; //年龄
21
22     //继承类的构造函数
23    function __construct( $personSex, $personAge )
24     {
25         parent::__construct( "heiyeluren" ); //使用parent 调用了父类的构造函数
26         $this->personSex = $personSex;
27         $this->personAge = $personAge;
28     }
29
30     function printPerson()
31     {
32         print( $this->name. " is " .$this->personSex. ",this year" .$this->personAge );
33     }
34 }
35
36 //实例化Person 对象
37 $personObject = new Person( "male", "21");
38
39//执行打印
40 $personObject->printPerson(); //输出:
41
42 ?>
————————————

我们注意这么几个细节:成员属性都是public 的,特别是父类的,是为了供继承类通过this 来访问。我们注意关键的地方,第25 行:

parent::__construct( "heiyeluren" ),这时候我们就使用parent 来调用父类的
构造函数进行对父类的初始化,因为父类的成员都是public 的,于是我们就能够在继承类中直接使用this 来调用。
总结:
this 是指向对象实例的一个指针,self 是对类本身的一个引用,parent 是对父类的引用。

(4) static

static 关键字在类中是,描述一个成员是静态的,static 能够限制外部的访问,因为static 后的成员是属于
类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静
态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。类的静态方
法能访问类的静态的属性。另外说明的是,static 的成员,必须使用self 来访问,使用this 会出错。
另外,还有一个比较重要的特点就是,如果一个方法使用了static,那么这个方法就能够在不需要实例化对象的前
提下直接使用该方法.
(关于this 和self 的异同,请参考:
http://blog.csdn.net/heiyeshuwu/archive/2004/11/03/165828.aspx)

(5)const

const 是一个定义常量的关键字,类似于C 中的#define,能够定义一个常量,如果在程序中改变了它的值,那么
会出现错误。

举例说明上面的代码:(注:以下代码来自phpe.net)
———— PHP代码 ————

class Counter
{
private static $count = 0;//定义一个静态属性
const   VERSION       = 2.0;//定义一个常量

//构造函数
function __construct()
{
self::$count++;
}

//析构函数
function __destruct()
{
self::$count--;
}

//定义一个静态的方法
static function getCount()
{
return self::$count;
}
}

//创建一个实例
$c = new Counter();

//执行打印
print( Counter::getCount(). "
n" ); //使用直接输入类名来访问静态方
法Counter::getCount

//打印类的版本
print( "Version useed: " .Counter::VERSION. "
n" );
?>

11Sep/100

PHP5中面向对象部分的特性——abstract抽象、final最终和static静态【转】

Posted by alacner

1.abstract

一. 面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 而抽象类就可以提供多个实用的接口.如果你建立了一个只有抽象方法的类,那么你就定义了一个接口(interface).

在抽象类中定义的方法,也都是抽象方法,当然,抽象方法与普通的方法不一样,它只是子类中普通方法的一个占位符(只是占个地主不启作用),没有任何代码,也没有"{}"包含,而是以";"结束的.

  1. abstract class   aaa{
  2. abstract function bbb();
  3. }

当然,如果一个类中有一个或多个抽象的方法,那么这个类就成了抽象类.抽象类不能实例化,只能继承,然后,实例化子类.值得注意的是,它的子类必须覆写所有方法(all method),这样,子类就成为普通的类,才可以实例化.否则,子类中只要有一个抽象方法,那么子类必须声明是抽象类,在class 关键字前加上 abstract.

二.抽象的类的声明方法:

1.使用abstact 限定语.

  1. //定义抽象类aaa为基类
  2. abstract class aaa {
  3. abstract function bbb();
  4. abstract function   ccc();
  5. }
  6. //定义普通类childfromaaa
  7. //继承aaa抽象类
  8. class childfromaaa extends aaa {
  9. //重写所有抽象类中的方法
  10. public function bbb(){
  11. //.....
  12. }
  13. public function ccc(){
  14. //...
  15. ....
  16. }
  17. }
  18. //实例化子类
  19. $child = new childfromaaa;  //right

2. PHP中有interface 和implements关键字. 你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口.

  1. //定义抽象基类
  2. interface Foo {
  3. function a(Foo $foo);
  4. }
  5. //定义另一个抽象类
  6. interface Bar {
  7. function b(Bar $bar);
  8. }
  9. //定义子类childfromaaa
  10. //继承aaa抽象类(接口)
  11. //实现多类继承
  12. class FooBar implements Foo, B ar {
  13. function a(Foo $foo) {
  14. // ...
  15. }
  16. function b(Bar $bar) {
  17. // ...
  18. }
  19. }
  20. $a = new FooBar;
  21. $b = new FooBar;
  22. $a->a($b);
  23. $a->b($b);

2.final

final / final关键字
PHP5中新增加了final关键字,它可以加在类或类方法前。标识为final的类方法,在子类中不能被覆写。标识为final的类,不能被继承,而且其中的方法都默认为final类型。
Final方法:
<?php
class Foo {
final function bar() {
// …
}
}
?>
Final类:
<?php
final class Foo {
// class definition
}
// 下面这一行是错误的
// class Bork extends Foo {}
?>

3.static

) static
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他 类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类 似于全局函数。类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
(关于this和self的异同,请参考: http://blog.csdn.net/heiyeshuwu/archive/2004/11/03/165828.aspx )

11Sep/100

全站备份

Posted by alacner

为了防止意外的发生,写了脚本,对全站进行了每日备份。

Tagged as: , No Comments
9Sep/101

MVC和MVP的一些思考【转】

Posted by alacner

前言

这篇文章是我近期对MVC和MVP的一些思考,在使用MVC/MVP模式的过程中曾经走过一些弯路。现在虽然改正了某些弯路,但不保证改正了所有的弯路(例如对渲染的理解),所以请阅读这篇文章的朋友不吝发挥你们的质疑。

写这篇文章也是想知道自己还有什么地方是错的,我的最终方案是否可行?

有交流才会有进步。你有一个苹果,我有一个苹果,我们交换后仍各有一个苹果,你有一个思想,我有一个思想,我们交换后......会有N个思想 :p

1. MVC的理解误区
以下是我以前对MVC模式的理解误区:

1. 认为Model是指失血模型的实体类(Entity),是作为View和Controller之间的传输数据。

2. 把业务逻辑全部放在Controller端,认为Controller是用来写UI的业务逻辑的。

这两个误区本质上都是对Model的作用不明导致的。

Model在MVC架构中起的作用非常重要,它才是UI业务逻辑真正的实现层。所以Model的实际上是Business Model(业务模型)。

而Controller仅仅起一个“桥梁”作用,它负责把View的请求转发给Model,再负责把Model处理结束的消息通知View。Controller就是一个消息分发器。Controller是用来解耦View和Model的,具体一点说,就是为了让UI与逻辑分离(界面与代码分离)。

2. MVC与VCP的区别
MVC的View直接与Model打交道,Controller只转发请求(View的请求)和通知(Model处理完之后的通知),不传递数据(业务结果),而是由View直接向Model拿数据。

MVP的View不与Model直接联系,所有的请求、结果通知、数据传递都是通过Controller转发,View和Model彼此不知道对方的存在。

3. MVC与MVP的相同点
无论是MVC还是MVP,View和Controller都是紧密联系的,在WinForm模式下更显得突出,View和Controller直接绑定在一起了(在一个类里面)。

MVC/MVP都是通过“通知”机制(观察者模式,在C#中使用事件)来解决View和Controller的交互。

4. MVP框架的设计
在MVP框架里,用Presenter代替MVC的Controller,而且View不再与Model交互。

4.1. Presenter
Presenter的作用比Controller大得多,Controller只是一个纯粹的消息分发器,而Presenter还负责传递Model的处理结果给View,并指导View的渲染。

注意,渲染我理解为UI的展现方式。

4.2. Presenter与Model
Presenter与Model使用接口隔离,Presenter直接调用Model的接口方法(比如IUserModel的FetchUserList()、SaveUser()等)。

4.3. Presenter与View
View与Presenter的交互使用观察者模式,有两种方式实现:

1. View主动使用Presenter。

View主动构造Presenter,并在内部调用Presenter的方法。即先有View再有Presenter。这种情况下,View明确知道自己要使用哪些Presenter。

2. Presenter主动使用View。

Presneter主动创建View,View里面定义有一堆的事件,Presenter注册这些事件。这种情况下,View不知道自己会被哪些Presenter使用。

第二种方式比第一种方式耦合性低,但View里要写一堆的事件,Presenter类里要捕获一堆的事件,感觉写起来很烦琐,代码不雅观。

5. Controller/Presenter的意义
以下Controller/Presenter简称为C/P。

C/P存在的意义是为了解耦View和Model。如果C/P不存在的话,View就直接访问Model,而View的变化是频繁的,不同的系统,View的展现方式不一样,让Model去控制View的渲染,会降低Model的重用性。如果Model不管View的渲染,由View自己渲染,那么就是WinForm的解决方式,即View和C/P经绑定(合并为一个类)。

6. 为什么要用MVC/MVP模式?

老实说,到目前为止,我依然看不出WinForm把Model分离之后,与标准的MVC/MVP有什麽差距。在WinForm分离Model之后,两者的交互可以用接口隔离,也可以用观察者模式让Form与Model一对多。再用IoC替代View直接构造Model的实例,那么WinForm代表的View+C/P(Form)已经与Model完全解耦了,View+C/P层连Model层都不需要引用(但要引用IModel层)。

这里关键是使用IoC技术,否则WinForm确实会导致View与Model直接耦合,更换Model,或者改变Model的接口会导致View要修改。注意,我们分离出来的Model,并不完全是为了使UI与代码分离,我们更注重Model的重用性,力求一个Model被多个View享用,甚至是不同系统的View享用。这就要求我们改动View的渲染时不用改动Model,同样地,我们改动Model的内部逻辑时,也不影响View的渲染。

嗯,或许还有一点:View通过Controller/ Presenter交互,使得系以统可以有一个共同的“入口”,系统可以在入口处做拦截,利于日志和权限的处理。但我们可以用AOP技术替代C/P的入口。

7. 新方案
由此看来,IoC+AOP可以完全替代C/P,而且框架上更“干净”,开发人员写起来更自由。

转自:http://dotnet.csdn.net/page/fa58fc72-35f6-4720-8afd-a269d43f37e0

8Sep/101

Web SSH 客户端Ajaxterm安装(亲测)

Posted by ofeng

Ajaxterm是一款基于Web的SSH客户端软件,它是采用Python编写的,这也就保证了它能在多种Linux发行版的系统中使用,同时它的安装非常简单。

1.下载
  1. wget http://antony.lesuisse.org/software/ajaxterm/files/Ajaxterm-0.10.tar.gz 
2.安装
  1. tar zxvf  Ajaxterm-0.10.tar.gz 
  2. cd Ajaxterm-0.10 
  3. ./configure --prefix=/usr 
  4. make 
  5. make install 
3.配置

Ajaxterm需要运行在python2.5以上的环境,如果你的系统python的版本低于2.5的话,运行后不能成功登录,会提示"Login incorrect"错误。

要安装新版本的python

  1. $rpm -Uvh http://yum.chrislea.com/centos/5/i386/chl-release-5-3.noarch.rpm 
  2. $rpm  --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CHL 
  3. $rpm -Uvh  http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm 
  4. $yum install libffi 
  5. $yum install python26

同时,Ajaxterm需要做相应的配置:

修改/etc/init.d/ajaxterm文件,在前面(注释后面)添加配置 DAEMON=/usr/bin/python2.6(根据你安装的最新版本的python,这里是2.6)。

ajaxterm=/usr/local/share/ajaxterm/ajaxterm.py 这个路径也要改正确

4.运行

经过上面的步骤,就可以成功启动Ajaxterm,操作Ajaxterm可以查帮助命令:

  1. $/etc/init.d/ajaxterm --help
  2. Usage: ajaxterm {start|stop|restart|condrestart} 
5.设置Nginx代理

Ajaxterm默认使用的是8022端口,一般防火墙访问的端口有限制,80,443这些不会封,这时我们可以考虑配置web服务器反响代理的方式通过80端口访问Ajaxterm。官方提供配置apahce代理的方法,而我使用的web服务器是nginx,可以通过如下方式配置:

在nginx.conf文件中添加一个server配置节,内容如下:

  1. server 
  2.   { 
  3.     listen  80; 
  4.     server_name  ssh.example.com; 
  5.     location / { 
  6.         proxy_pass http://127.0.0.1:8022;
  7.     } 
  8.   } 

然后重新加载nginx配置文件,就可以通过ssh.example.com访问你的linunx了。

最后的效果如下,完全是一个web版的putty。

image

转载至,(大盛博客)

8Sep/102

自我批评

Posted by alacner

最近一段时间接二连三的项目排进来,反而没有了时间来写下博客,自觉有罪,来做下说明,月末时,根据一些情况来分享开发项目当中遇到的一些可以分享的东西。

好,继续闷头苦思去了。

Tagged as: , 2 Comments
8Sep/100

nginx/apache 中防止绑定别人恶意解析过来的域名

Posted by ofeng

转至:http://salogs.com/2010/01/nginxapache-%E4%B8%AD%E9%98%B2%E6%AD%A2%E7%BB%91%E5%AE%9A%E5%88%AB%E4%BA%BA%E6%81%B6%E6%84%8F%E8%A7%A3%E6%9E%90%E8%BF%87%E6%9D%A5%E7%9A%84%E5%9F%9F%E5%90%8D/

 

最近为了符合国家某某部门的需求,需要禁止别人而已解析非本站的域名到本站,需要做一些域名绑定的操作,故对公司各个项目做了域名绑定处理。

nginx

server {
    listen 80 default;
    root /dev/null;
    location / {
return 404;
        access_log off;
}
}

apache

# vhost.conf

<Virtualhost *:80>
ServerName  joinus.jobkoo.com
ServerAlias wanmei.jobkoo.com,test.jobkoo.com,*.jobkoo.com
  RewriteEngine on
# 只要不是下面列出的域名均报错指向error.html文件,这个文件并不存在,因此会报404
# 错误。正好符合国家要求
  RewriteCond %{HTTP_HOST} !^joinus|wanmei|test|demo\.jobkoo\.com [NC]
  RewriteRule ^/(.*) /error.html [L]
# 判断Port是否为443,不是的话跳转到443端口
  RewriteCond %{SERVER_PORT} !^443$
  RewriteRule ^/?(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
DocumentRoot "/data/web/www"
</VirtualHost>

检测是否配置成功

curl –I  domain