适用场景:
同一服务器下有多个项目
WWW服务器虚拟主机是指使用一台物理机器,
充当多个主机名的WWW服务器。
比如由一台机器同时提供 http://www.company1.com 和 http://www.company2.com 等的WWW服务,
而浏览这些WWW站点的用户感觉不到这种方式下跟由不同的机器提供不同的服务有什么差别。
使用WWW虚拟主机的好处在于,
一些小规模的网站,通过跟其他网站共享同一台物理机器,
可以减少系统的运行成本,并且可以减少管理的难度。
另外,对于个人用户,也可以使用这种虚拟主机方式来建立有自己独立域名的WWW服务器,
目前国内有很多公司都提供这种免费的服务。
WWW虚拟主机有两种工作方式:
1.1 基于IP地址的虚拟主机方式 (不建议使用,这是httpd 1.0 的时候唯一的一种方式)
1.2 基于主机名的虚拟主机方式
找到 D:\AppServ\Apache2.2\conf\httpd.conf
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf 去掉前面的 #
找到 D:\AppServ\Apache2.2\conf\/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.x 服务器管理员的邮箱
DocumentRoot "C:/Apache2.2/docs/dummy-host.x" 是网站文件存放的根目录
ServerName dummy-host.x 是网站域名, 需要跟 DNS 指向的域名一致
ServerAlias www.dummy-host.x 是网站域名的别名
ErrorLog "logs/dummy-host.x-error.log" 错误日志
CustomLog "logs/dummy-host.x-access.log" common apache 日志
</VirtualHost>
如果有多个就配置多个这样组.
下面我们来实际操作:
D:\AppServ\Apache2.2\www\ 创建
news blog b2c bbs
在这四个网站目录里面新建一个 index.php
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.x
DocumentRoot "D:/AppServ/www/news"
ServerName news.com
ServerAlias www.news.a.com ----------别名
ErrorLog "logs/dummy-host.x-error.log"
CustomLog "logs/dummy-host.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/b2c"
ServerName b2c.com
ServerAlias www.b2c.com
ErrorLog "logs/dummy-host2.x-error.log"
CustomLog "logs/dummy-host2.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/bbs"
ServerName bbs.com
ServerAlias www.bbs.com
ErrorLog "logs/dummy-host3.x-error.log"
CustomLog "logs/dummy-host3.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/blog"
ServerName blog.com
ServerAlias www.blog.com
ErrorLog "logs/dummy-host4.x-error.log"
CustomLog "logs/dummy-host4.x-access.log" common
</VirtualHost>
重启apache
配置 windows 自带的hosts 进行域名解析
C:\WINDOWS\system32\drivers\etc\hosts
ip 地址 对应的网站域名
10.0.0.60 www.news.com
10.0.0.60 www.news.a.com
10.0.0.60 www.b2c.com
10.0.0.60 www.bbs.com
10.0.0.60 www.blog.com
url重写映射
www.news.a.com
=======================
url 重写
apache 的mod_rewrite模块提供了一种灵活强大的url操作机制,可以是服务器操作整个url,他的原理是基于正则表达式分析器的重写引擎实时的重写url请求
mod_rewrite 只对.htaccess中的配置有效
在.htaccess中的常用指令
RewriteEngine on|off 打开或者关闭Rewrite
RewriteBase url_path 设置url重写的根目录 (如果不写此命令则表示重写的根目录是.htaccess所在的目录)
RewriteCond %{引用形式变量} 引用条件变量的值正则 (如果想知道更多 请百度 Name_of_variable指定字符串列表--只对当前uri 有效,RewriteCond后面可以选择添加标记 NC==不区分大小写 OR 与下一个连接建立或的关系)
在dos命令下创建 .htaccess文件
C:\Documents and Settings\Administrator>d:
D:\>cd d:/
D:\> cd Zend
D:\Zend\www>copy con .htaccess
^Z
已复制 1 个文件。
D:\Zend\www>
RewriteRule pattern substring flag
常见的flag标志: (多个标志之间用 , 分割)
C 用于关联下一条规则 如果当前规则匹配成功 则该标记不起作用 否则与之关联的规则都会被跳过而不进行匹配
L 用于强制停止重写操作,并且不再响应其他操作。
NC 忽略大小写
R 强制重定向
F 强制禁止url
下面做一个简单的演示:
假设在 /shop/.htaccess 我们在/shop/old.html 和 /shop/new.html
当用户访问 old.html 时显示 new.html
#开启重写引擎
RewriteEngine on
#定义url重写目录---不是必须的
RewriteBse /
#重写规则
RewriteRule ^old\.html$ new.html
案例1: 所有的 xxxx.html 都转向 xxxx.php
页面静态化是现在比较流行的一种页面处理技术,静态页面既能提高访问速度,也能被搜索引擎更好的抓取,
比较常用的两种方式
一:通过程序来静态化
二:通过apache url重写来实现
RewriteEngine on
RewriteRule (.*)\.html $1.php
url: http://www.cdeduask.com/test.html转向 D:/www/test.php 文件
案例2: 去掉index.php
RewriteEngine on
RewriteRule ^(.*)$ index.php
备注:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/cake/app
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/cake/app
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(app/webroot/)?(img|css|js)/(.*)$ #排除/app/webroot/img下面的索引
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
案例3: 二级域名设置 http://www.cdeduask.44class.com/
RewriteEngine on
RewriteRule ^[a-z:\/\/\.]+\.([0-9a-z]+)+\.com\/([a-z0-9A-Z]+)\.html$ /mycms/$2/$3.php
apache 配置
<VirtualHost *:80>
DocumentRoot "D:/Zend/www/mycms/44class"
ServerName cdeduask.44class.com
ServerAlias www.cdeduask.44class.com
</VirtualHost>
windows DNs配置
127.0.0.1 www.cdeduask.44class.com
url:http://www.cdeduask/44class.com/test.html
案例4:根据客户端使用的浏览器的不同显示不同页面
RewriteEngine on #开启apache重写引擎
#如果是firefox则显示 home.firefox.html
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /home.firefox.html
#如果是ie 则显示 home.ie.html
RewriteCond %{HTTP_USER_AGENT} ^MSIE.*
RewriteRule ^/$ /home.ie.html
#如果是其他浏览器则显 不满足上面的条件则显示下面的 home.std.html
RewriteRule ^/$ /home.std.html
案例5: 防止图片盗链设置
所谓的图片盗链就是指服务器提供商自己不提供服务的内容,而是通过技术手段直接在自己的网站向终端用户提供其他服务商提供的服务内容,以骗取用户的浏览和点击率,换句话说就是受益者不提供资源,而真正的资源提供商却没有任何收益,
在网站资源中像图片、视频等这些比较大的文件有可能成为盗链的对象,一旦文件被盗就会增加服务器的流量,影响网站的正常访问速度,虽然我们不能保证100%的防止这些文件被别人盗用但是可以通过 http Referer 来进行限制, 而使用apache可以很方便的进行设置
假设主机名为 www.example.com 那么在根目录的 .htaccess 中做如下配置
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
说明: 允许http_referer为空是访问,一般我们建议这样设置.允许用户直接输入图片地址显示图片
RewriteCond %{HTTP_REFERER} ! http://www.example.com [NC]
RewriteCond %{HTTP_REFERER} ! http://www.baidu.com [NC]
RewriteCond %{HTTP_REFERER} ! http://www.google.com [NC]
说明: 设置允许访问的站
如果不是上面的站点 就访问下面的图片,设置图片被盗时用于替换的图片
RewriteRule .*\.(gif|jpg|png)$ http://www.example.com/default.jpg [R,NC,L]
说明: 如果图片被盗链就显示default.jpg 如果你不想设置替换图片可以使用下面的规则
RewriteRule .*\.(gif|jpg|png)$ - [F]
同一服务器下有多个项目
WWW服务器虚拟主机是指使用一台物理机器,
充当多个主机名的WWW服务器。
比如由一台机器同时提供 http://www.company1.com 和 http://www.company2.com 等的WWW服务,
而浏览这些WWW站点的用户感觉不到这种方式下跟由不同的机器提供不同的服务有什么差别。
使用WWW虚拟主机的好处在于,
一些小规模的网站,通过跟其他网站共享同一台物理机器,
可以减少系统的运行成本,并且可以减少管理的难度。
另外,对于个人用户,也可以使用这种虚拟主机方式来建立有自己独立域名的WWW服务器,
目前国内有很多公司都提供这种免费的服务。
WWW虚拟主机有两种工作方式:
1.1 基于IP地址的虚拟主机方式 (不建议使用,这是httpd 1.0 的时候唯一的一种方式)
1.2 基于主机名的虚拟主机方式
找到 D:\AppServ\Apache2.2\conf\httpd.conf
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf 去掉前面的 #
找到 D:\AppServ\Apache2.2\conf\/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.x 服务器管理员的邮箱
DocumentRoot "C:/Apache2.2/docs/dummy-host.x" 是网站文件存放的根目录
ServerName dummy-host.x 是网站域名, 需要跟 DNS 指向的域名一致
ServerAlias www.dummy-host.x 是网站域名的别名
ErrorLog "logs/dummy-host.x-error.log" 错误日志
CustomLog "logs/dummy-host.x-access.log" common apache 日志
</VirtualHost>
如果有多个就配置多个这样组.
下面我们来实际操作:
D:\AppServ\Apache2.2\www\ 创建
news blog b2c bbs
在这四个网站目录里面新建一个 index.php
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.x
DocumentRoot "D:/AppServ/www/news"
ServerName news.com
ServerAlias www.news.a.com ----------别名
ErrorLog "logs/dummy-host.x-error.log"
CustomLog "logs/dummy-host.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/b2c"
ServerName b2c.com
ServerAlias www.b2c.com
ErrorLog "logs/dummy-host2.x-error.log"
CustomLog "logs/dummy-host2.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/bbs"
ServerName bbs.com
ServerAlias www.bbs.com
ErrorLog "logs/dummy-host3.x-error.log"
CustomLog "logs/dummy-host3.x-access.log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.x
DocumentRoot "D:/AppServ/www/blog"
ServerName blog.com
ServerAlias www.blog.com
ErrorLog "logs/dummy-host4.x-error.log"
CustomLog "logs/dummy-host4.x-access.log" common
</VirtualHost>
重启apache
配置 windows 自带的hosts 进行域名解析
C:\WINDOWS\system32\drivers\etc\hosts
ip 地址 对应的网站域名
10.0.0.60 www.news.com
10.0.0.60 www.news.a.com
10.0.0.60 www.b2c.com
10.0.0.60 www.bbs.com
10.0.0.60 www.blog.com
url重写映射
www.news.a.com
=======================
url 重写
apache 的mod_rewrite模块提供了一种灵活强大的url操作机制,可以是服务器操作整个url,他的原理是基于正则表达式分析器的重写引擎实时的重写url请求
mod_rewrite 只对.htaccess中的配置有效
在.htaccess中的常用指令
RewriteEngine on|off 打开或者关闭Rewrite
RewriteBase url_path 设置url重写的根目录 (如果不写此命令则表示重写的根目录是.htaccess所在的目录)
RewriteCond %{引用形式变量} 引用条件变量的值正则 (如果想知道更多 请百度 Name_of_variable指定字符串列表--只对当前uri 有效,RewriteCond后面可以选择添加标记 NC==不区分大小写 OR 与下一个连接建立或的关系)
在dos命令下创建 .htaccess文件
C:\Documents and Settings\Administrator>d:
D:\>cd d:/
D:\> cd Zend
D:\Zend\www>copy con .htaccess
^Z
已复制 1 个文件。
D:\Zend\www>
RewriteRule pattern substring flag
常见的flag标志: (多个标志之间用 , 分割)
C 用于关联下一条规则 如果当前规则匹配成功 则该标记不起作用 否则与之关联的规则都会被跳过而不进行匹配
L 用于强制停止重写操作,并且不再响应其他操作。
NC 忽略大小写
R 强制重定向
F 强制禁止url
下面做一个简单的演示:
假设在 /shop/.htaccess 我们在/shop/old.html 和 /shop/new.html
当用户访问 old.html 时显示 new.html
#开启重写引擎
RewriteEngine on
#定义url重写目录---不是必须的
RewriteBse /
#重写规则
RewriteRule ^old\.html$ new.html
案例1: 所有的 xxxx.html 都转向 xxxx.php
页面静态化是现在比较流行的一种页面处理技术,静态页面既能提高访问速度,也能被搜索引擎更好的抓取,
比较常用的两种方式
一:通过程序来静态化
二:通过apache url重写来实现
RewriteEngine on
RewriteRule (.*)\.html $1.php
url: http://www.cdeduask.com/test.html转向 D:/www/test.php 文件
案例2: 去掉index.php
RewriteEngine on
RewriteRule ^(.*)$ index.php
备注:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/cake/app
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/cake/app
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(app/webroot/)?(img|css|js)/(.*)$ #排除/app/webroot/img下面的索引
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
案例3: 二级域名设置 http://www.cdeduask.44class.com/
RewriteEngine on
RewriteRule ^[a-z:\/\/\.]+\.([0-9a-z]+)+\.com\/([a-z0-9A-Z]+)\.html$ /mycms/$2/$3.php
apache 配置
<VirtualHost *:80>
DocumentRoot "D:/Zend/www/mycms/44class"
ServerName cdeduask.44class.com
ServerAlias www.cdeduask.44class.com
</VirtualHost>
windows DNs配置
127.0.0.1 www.cdeduask.44class.com
url:http://www.cdeduask/44class.com/test.html
案例4:根据客户端使用的浏览器的不同显示不同页面
RewriteEngine on #开启apache重写引擎
#如果是firefox则显示 home.firefox.html
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /home.firefox.html
#如果是ie 则显示 home.ie.html
RewriteCond %{HTTP_USER_AGENT} ^MSIE.*
RewriteRule ^/$ /home.ie.html
#如果是其他浏览器则显 不满足上面的条件则显示下面的 home.std.html
RewriteRule ^/$ /home.std.html
案例5: 防止图片盗链设置
所谓的图片盗链就是指服务器提供商自己不提供服务的内容,而是通过技术手段直接在自己的网站向终端用户提供其他服务商提供的服务内容,以骗取用户的浏览和点击率,换句话说就是受益者不提供资源,而真正的资源提供商却没有任何收益,
在网站资源中像图片、视频等这些比较大的文件有可能成为盗链的对象,一旦文件被盗就会增加服务器的流量,影响网站的正常访问速度,虽然我们不能保证100%的防止这些文件被别人盗用但是可以通过 http Referer 来进行限制, 而使用apache可以很方便的进行设置
假设主机名为 www.example.com 那么在根目录的 .htaccess 中做如下配置
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
说明: 允许http_referer为空是访问,一般我们建议这样设置.允许用户直接输入图片地址显示图片
RewriteCond %{HTTP_REFERER} ! http://www.example.com [NC]
RewriteCond %{HTTP_REFERER} ! http://www.baidu.com [NC]
RewriteCond %{HTTP_REFERER} ! http://www.google.com [NC]
说明: 设置允许访问的站
如果不是上面的站点 就访问下面的图片,设置图片被盗时用于替换的图片
RewriteRule .*\.(gif|jpg|png)$ http://www.example.com/default.jpg [R,NC,L]
说明: 如果图片被盗链就显示default.jpg 如果你不想设置替换图片可以使用下面的规则
RewriteRule .*\.(gif|jpg|png)$ - [F]