MySQL字符集修改命令

查看编码:
show variables like ‘collation_%';
show variables like ‘character_set_%';

修改:
MySQL:修改默认字符集,转换字符集(MySQL 5.X)
1. 修改 MySQL 数据库默认字符集(mysql database default character set)
alter database testdb default character set = gb2312;
2. 修改 MySQL 数据表默认字符集(mysql table default character set)
alter table ip_to_country default character set = gb2312;
注意:修改 MySQL 的默认字符集,不管是在数据库级别,还是数据表级别,对已经存储的字符数据无任何改变。只是新增的表或列,开始使用新的字符集。

3. 转换 MySQL 数据表字符集(mysql table character set)
MySQL 中有一个数据表 ip_to_country,以前该表字符列数据都是以 utf8 编码格式存放的,现在想转换为 gb2312 编码格式存放。需要使用 MySQL 转换字符集命令:convert to character set
alter table ip_to_country convert to character set gb2312;
提示:convert to 也会把数据表 ip_to_country 的默认字符集从 utf8 更改为 gb2312。

4. 转换 MySQL 数据表中某个列的字符集(mysql column character set)
alter table ip_to_country modify country_name varchar(50) character set gb2312;
这个语句把单独一个列 country_name 的字符集转换为 gb2312。这在用法在实际中比较少见,因为大多数情况下,都是改变整个表的字符集。

MySQL字符集修改命令

1.修改服务器级
a. 临时更改: mysql>SET GLOBAL character_set_server=utf8;
b. 永久更改:shell>vi /etc/my.cnf[mysqld]default-character-set=utf8

2.修改数据库级
a. 临时更改: mysql>SET GLOBAL character_set_database=utf8;
b. 永久更改:改了服务器级就可以了

3.修改表级
mysql>Alter TABLE table_name DEFAULT CHARSET utf8; 更改了后永久生效

4.修改列级修改示例:
mysql>Alter TABLE `products` CHANGE `products_model` `products_model` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; 更 改了后永久生效

5.更改连接字符集
a. 临时更改:mysql> SET NAMES utf8;
b.永久更改: shell>vi /etc/my.cnf在[client]中增加:default-character-set=utf8

MySQL优化my.cnf缓存

MySQL优化步骤及my.cnf缓存优化 – 似水流年 — 韩欣的博客 – 博客频道 – CSDN.NET

my.cnf缓存优化
在 my.cnf 中添加/修改以下选项:

#取消文件系统的外部锁
skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题
skip-name-resolve

#索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量
key_buffer = 512M

#连接排队列表总数
back_log = 200
max_allowed_packet = 2M

#打开表缓存总数,可以避免频繁的打开数据表产生的开销
table_cache = 512

#每个线程排序所需的缓冲
sort_buffer_size = 4M

#每个线程读取索引所需的缓冲
read_buffer_size = 4M

#MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size = 64M

#缓存可重用的线程数
thread_cache = 128

#查询结果缓存
query_cache_size = 128M

#设置超时时间,能避免长连接
set-variable = wait_timeout=60

#最大并发线程数,cpu数量*2
thread_concurrency = 4

#记录慢查询,然后对慢查询一一优化
log-slow-queries = slow.log
long_query_time = 1

#关闭不需要的表类型,如果你需要,就不要加上这个
skip-innodb
skip-bdb

转-创业企业的十二种死法

来源:新浪网

1.团队内讧。这个是最根本的。其一:创业团队最好找价值观能接近的,鄙人不才,第一次创业找合伙人时过于深究探讨创业的项目本身,而忽视了跟合伙人交流价值观等更为宏观的理念,所以最后出现些不大不小的挫折,谁也无法谁服谁,他们就撤了。其二:创业团队的股权分配要合理或者说要设置一个可以衡量激励的股权分配办法。30多岁以上的朋友们应该还对爱多VCD有印象,当年爱多的两位创始人胡志标与陈天南各出资2000元人民币每人占45%的股份(所在村在占10%)干起了小厂,做起了学习机等电子产品的小生意,当时还差点被时任中国最大的学习机制造企业小霸王公司总经理段永平以造假侵权处理了,可是谁知道,就是这位25岁的小青年,仅仅用了四年时间就与段永平一块坐在北京梅地亚中心一掷亿元竞夺“标王”,最终胡志标以2.1亿元中标。爱多VCD当时应该算是响彻中国吧,但是爱多的另一位创始人陈天南却从未参与过爱多公司的经营行为。立下汗马功劳的元老们当然感觉不公平,再加上爱多财务上的疏漏,引起陈天南被踢出局的猜忌,陈立马在颇有影响力的羊城晚报发表声明,瞬间像多米诺骨牌一样,偌大的爱多集团轰然倒塌,胡也被判入狱。一个牛逼的团队,一定要有个强有力的带队人物统一大伙的价值观。

2.闭门造车。产品不接地气,老是在办公桌前意淫用户需求,哇,用户有这个需求,哪怕有1%的用户付费,我们就能天天泡妞啦……,我有个朋友想做线下的实体店的导购,跟我讲时激情四射,口沫飞溅,我问他,你去和这类导购行业的商家聊了吗?他说还没……最后让我一棒子打退堂鼓了。不去撸了袖子甩开膀子低三下四的像神经病一样去和潜在客户搭讪聊天套近乎找用户的痛点和需求。

3.虎口拔牙。一上来就想,这个市场有一千个亿的空间,我哪怕能拿到1%的份额,这就是多少哇!我就发了!女神妹纸都会主动投怀送抱的…你不想想这么大的市场份额早有巨头盯着呐,你相当于说:嗨!马云、Robby,化腾,咱们四人玩麻将吧。你玩得起吗?所以别想虎口拔牙,

4.钱太多。一开始就拿到太多钱也不见得是好事,容易头脑发热。某朋友一创业就拿到400万人民币启动资金,之后又拿到200万美金。瞬间由屌丝变土豪,技术,给我招!商务人员,给我招!各种人员,给我招!招招招!!我们要做第四巨头!兄弟们给我冲啊!都有期权,等着发财吧!玩了两年,没赚钱,融资的钱也快花完了,前不久几个创始人内讧了。所以说,钱多不见得是好事。

5.明星团队。明星团队有个缺点,容易轻飘飘的,不好接地气。有个团队,都是海归,有哈佛背景的,老炫耀自己是高富帅团队,“哈哈,尔等一年后就看我们风风火火的市场反应吧,有幸跟这么牛的团队近距离接触共进晚餐,你们真是太荣幸啦,哈哈,不要四处张扬哦。”最后他们做的是一款屌丝用户产品。几乎忽略不计的市场份额。现在我想说,如今做互联网接地气才重要,一群高富帅能理解屌丝的需求吗?所以至少要找个屌丝合伙人啊。

6.窗口期已经关闭。我以前感觉像汽车之家这类的网站应该做不大,但是人家愣是硬生生的做出了10亿美金来,为什么呐?因为人家赶上了形势,正好是中国人民开始买车的年份做汽车之家,你提早做或晚两年做,都没太大机会了(当然,这里面也有人的原因,其中的内幕值得你们去深挖学习)。因为窗口期已经关闭了。所以有时候创业还是要分析形势,感觉什么以后有前途,就提前布局,大不了就苦逼两年嘛。当然这也需要创始人有一定的眼光,

7.后院失火。这一条你就会理解娶一个能理解并支持你创业的老婆有多么的重要,同时也是说,你要获得你爸爸妈妈亲朋好友的支持,或至少他们对你创业不反对。你能想象得到吗?当你正在战场上率领一帮兄弟左突右杀时,突然一封家书来到:你老婆把你给休了,带着孩子回娘家了…真是丢了夫人又失子。

8.客场作战。喜欢篮球等运动的帅哥妹纸都明白主客场作战是有一定的优劣势的。这一条就是说,你是打算在你熟悉的这二亩三分地里挖矿?还是大老远跑到别人熟悉而你陌生的二亩三分地里挖矿?当然不乏一些连续创业者如:郭去疾、许朝军、王兴、陈欧。他们总是四处掘金,还颇有收获。而作为屌丝的你就要掂量掂量这样做的风险了……有个土豪,做实业起家的,突然有一天一拍脑门:老子要做一款旅游社交应用!说干就干,立马投了200万人民币,运营了快半年了,昨天我获得的数据是,这款旅游社交应用的注册用户才达到8000人……当然200万对人家来说就是一根牛毛,但是对于您呢?所以先老老实实的呆在你熟悉擅长的领域精耕细作吧,别天天意淫:老天给我个牛逼的idea吧,我立马就能做出个10亿美金的公司来。停止扯淡!我等凡夫俗子先主场作战!

9.Copy to China。当年团购模式在美国刚刚火起来时,在国内迅速展开了:千团大战。在屠杀式竞争下,现在你耳熟能详的团购网站还有几个?所以能copy国外而来的idea,你也要掂量下做的风险,因为此时说不定已经有一千个竞争对手比你先开始做了,这种大兵团作战对你整合资源的能力要求相当的高。在美国刚有个分享地理位置的应用火起来,国内就有了:街旁,什么,你没听说过街旁?没听说就对了,因为创始人就是凭资本copy了个美国的idea到中国,本以为也能火起来,最后引火烧身。所以单纯想靠copy国外的idea来创业,对于屌丝来说就是上刀山下火海。还是慢慢摸索更本土话的idea吧。

10.暴发户心态。人一旦有了暴发户心态,总会一掷千金,毫不手软,何况一个企业如果突然爆发了…一开始创业时没钱,穷了吧唧的,这类企业做事一般都谨小慎微,步步小心,兢兢业业。遥想当年,秦池酒厂初成立,它只是山东无数个不景气的小酒厂之一,产品从未出过市。93年,姬长孔大叔担任厂长,94年销售额突破1亿元,95年以6666万元获央视新闻联播后5秒黄金版标王,96年收入猛增至9.5亿元,为上一年的5倍多,同时又以3.212118亿元的天价获得标王,这一数字相当于1996年秦池全年利润的6.4倍,比竞标的第二位整整高出1亿元。有记者问秦池的这个标王数字是怎么算出来?姬长孔厂长趾高气昂的说:这是俺的手机号码,咋地啦?不能拿手机号码来竞拍啊……站得高摔得也很,97年一好事者写了篇:《秦池白酒是用川酒勾兑》,从此秦池稀里哗啦的衰败了。所以各位可以查下自95年后央视历届标王的价格,直到2004年央视的标王价格才又升到3.1亿元,可见当时的企业是多么的疯狂。

11.急功近利。就是说:一条蛇拼死一口气吞下了头大象,还没等着消化完,又准备再吞几头。总之是想在一年内把十年内该干的活搞定。就举个国外的例子吧。话说2000年的时候美帝有家在线杂货零售公司叫Webvan(玩完),创始人放豪言:美国人将放弃去超市购物的习惯,他们的日常所需的一切,包括蔬菜、牛奶、海鲜,只要动动鼠标,就会有人送上门来。用现在时髦的话来说,这不就是先进的O2O吗?一开始做的还行,兢兢业业的。但一不小心就被资本巨头看中了,亿级美金砸入,该公司随即耗资12亿美金并购竞争对手HomeGrocer。将自己的模式强加给合并后的公司,并购后技术、物流、管理流程频频冲突。一级市场还没拿下时,便向新的市场进军,而每个城市的运营成本超过 5000万美元。Webvan 当时制定的扩张计划多达 26 个城市。此外,该公司还签了10亿美金的合同用于几家中心仓库建设。有时该公司的配送车有时必须跑上几百公里就为给几个小情侣送盒安全套…而该公司的空降CEO也称:他要在短时间内将公司做大做快,在一个“赢者通吃”的游戏中成为胜者。2001年该公司的CEO只做了很短时间就去申请破产保护。所以咱创业稳扎稳打点好,

12.太高调。俗话说枪打出头鸟,你做事如果太高调的话,会很容易引起巨头的注意,低调点反而会悄悄的保护自己。像YY,博雅互动,汽车之家都是在上市公布财报时外界才突然发现这类公司已经闷头发大财好多年了。而有些公司刚出道就向外界大喊:我们要让全世界都知道我们很低调…结果永久的低调了…举几个例子,许朝军刚开始创业时,立刻获得资本青睐,踌躇满志,因为他要打造极具前景的轻博客:点点网。接连各种讲话各种大会各种为自己站台,谁知第二天一瞧,门户网站立马上线了轻博客。军哥傻眼了,面壁半年,出来第一句话就是:咱做人要低调…所以说,一开始创业咱低调些,等时机成熟了再挑战BOSS啊,或者一直低调着闷头发大财也行啊,咱创业不就是为了赚钱嘛(别跟我谈理想,戒了……)

MySQL 去除字段中的换行和回车符

UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ”), CHAR(13), ”);

char(10):  换行符
char(13):  回车符

linux 按照日期时间创建文件夹

mkdir /home/admin/htdocs/`date ‘+%Y-%m-%d-%H:%M’` #昨天日期 date ‘+%Y%m%d’ -d ‘1 days ago’

利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的。

  1、创建保存备份文件的路径/mysqldata

  #mkdir /mysqldata

  2、创建/usr/sbin/bakmysql文件

  #vi /usr/sbin/bakmysql

  输入

  rq=` date +%Y%m%d `

  tar zcvf /mysqldata/mysql$rq.tar.gz /var/lib/mysql

  或者写成

  rq=` date +%Y%m%d `

  mysqldump –all-databases -u root -p密码 > /mysqldata/mysql$rq.sql

注意:`符号是TAB键上面的符号,不是ENTER左边的

  还有date后要有一个空格。

  /var/lib/mysql是你数据库文件的目录,部分用户是/usr/local/mysql/data,每个人可能不同

  /mysqldata/表示保存备份文件的目录,这个每个人也可以根据自己的要求来做。

  3、修改文件属性,使其可执行

  # chmod +x /usr/sbin/bakmysql

  4、修改/etc/crontab

  #vi /etc/crontab

  在下面添加

  01 3 * * * root /usr/sbin/bakmysql

  表示每天3点钟执行备份

  5、重新启动crond

  # /etc/rc.d/init.d/crond restart

  完成。

mysql order by in 的字符顺序

有两种方式:

1. select uid from cdb where uid in (11,1,111) order by instr(‘,11,1,111,’,concat(‘,’,uid,’,’)) 注意要构造多出的, 号

2.(推荐)SELECT * FROM `cdb` WHERE `uid` IN (11,1,111) ORDER BY FIELD(`uid`, 11,1,111)

有文章指出:

FIELD(str,str1,str2,str3,…)
Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.

排序过程:把选出的记录的 id 在 FIELD 列表中进行查找,并返回位置,以位置作为排序依据。

这样的用法,会导致 Using filesort,是效率很低的排序方式。除非数据变化频率很低,或者有长时间的缓存,否则不建议用这样的方式排序。

建议在程序代码中自行排序,实测过程当中没发现性能瓶颈。

javascript 基于base64加密的部分解密方法

搜索eval把所有eval(开头的,改为 alert(
然后用firefox运行html,可以看到弹出的代码部分。
复制并粘贴到eval的那些代码上。
再从代码里找eval,改为alert,刷新浏览器,弹出代码再复制粘贴到第二次搜索到的部分。
基本这样就可以看到原代码部分了。可以根据自己要求修改了。
修改同时注意:
最后的();,如果没有它,就会JS错误。

javascript:取得浏览器信息

function gets(){
var s =”网页可见区域宽:”+ document.body.clientWidth;
s += “
网页可见区域高:” + document.body.clientHeight;
s += “
网页可见区域宽:” + document.body.offsetWidth +” (包括边线的宽)”;
s += “
网页可见区域高:” + document.body.offsetHeight +” (包括边线的宽)”;
s += “
网页正文全文宽:” + document.body.scrollWidth;
s += “
网页正文全文高:” + document.body.scrollHeight;
s += “
网页被卷去的高:” + document.body.scrollTop;
s += “
网页被卷去的左:” + document.body.scrollLeft;
s += “
网页正文部分上:” + window.screenTop;
s += “
网页正文部分左:” + window.screenLeft;
s += “
屏幕分辨率的宽:” + window.screen.width;
s += “
屏幕分辨率的高:” + window.screen.height;
s += “
屏幕可用工作区宽度:” + window.screen.availWidth;
s += “
屏幕可用工作区高度:” + window.screen.availHeight;
document.getElementById(‘dd’).innerHTML = s;
}

MySQL查询及删除重复记录的方法

查询及删除重复记录的方法
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三)
方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0

  方法二

  有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

  1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

  就可以得到无重复记录的结果集。

  如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

  发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

  2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

  假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

  最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)
查询重复

select * from tablename where id in (select id from tablename group by id having count(id) > 1
)

Apache Redirect Match 匹配重定向

从一个域名改到另一个域名,或者对服务器的目录结构进行调整时,你的用户还是从老的目录进来,就可能会遇到找不到文件,或是访问禁止等等问题。

这时候RedirectMatch就显得非常有用,如果你租用的虚拟主机是apache,那么恭喜你,你也可以使用目录下的.htaccess里设置 RedirectMatch。

语法: RedirectMatch [status] regex URL

regex 为 regular expressions 的缩写,具体参考 Apache 手册。

应用: 服务器配置, 虚拟主机, 目录, .htaccess文件

举例:

1) 将一个目录重定向到一个文件:

RedirectMatch 301 ^/lastdir$ /lastdir.html

2) 将A目录重定向到B目录:

RedirectMatch 301 ^/dir_a$ /dir_b

3) 将A目录下所有的文件重定向到B目录:

RedirectMatch 301 ^/dir_a/.* /dir_b

4) 将A目录下所有的文件重定向到B目录相对应的文件:

RedirectMatch 301 ^/dir_a/(.*) /dir_b/$1

$1表示上面圆括弧中的变量,如果有多个圆括弧,则按顺序为 $2,$3

5) 将A目录下所有的文件重定向到B服务器的C目录相对应的文件:

RedirectMatch 301 ^/dir_a/(.*) http://www.b.com/dir_c/$1

这个对有些原先使用个人空间,而现在有了自己的服务器或者虚拟主机的人来说非常有用,

比如原先是 www.wz.zj.cn/~mypage

而现在有了www.myweb.com 这个空间

那么就可以在原个人空间的目录下编辑 .htaccess 加入:

RedirectMatch 301 ^/~dir_a/(.*) http://www.mypage.com/$1

如果域名发生变更,可以这样:

RedirectMatch 301 ^(.*) http://www.newdomaim.com/$1

说明:

符号 ^ 表示匹配项的开始, 符号 $ 表示结束,符号 * 代表通配符,符号 () 定义变量,$1, $2 为变量名。

301,是状态码,表示永久重定向,另外还有:

302,临时重定向,如果不写状态码,则这个就是默认值。

303,系统会有一个页面,指出资源地址已经改变。

410,表示资源地址已经永久删除

Apache模块 mod_alias

说明 提供从文件系统的不同部分到文档树的映射和URL重定向
状态 基本(B)
模块名 alias_module
源文件 mod_alias.c

概述

此模块提供的指令可以操控作为请求到达服务器的URL。AliasScriptAlias指令用于在URL和文件系统路径之间实现映射,使不在DocumentRoot目录下的内容也能成为文档树的一部分,其中,ScriptAlias指令有更多一层的含义,它标明此目标目录下只有CGI脚本。

Redirect指令引导客户端以一个不同的URL产生一个新的请求,常用于一个资源被移动到一个新位置的时候。

mod_alias被设计成处理普通的URL操作。复杂的URL操作,比如处理请求字符串,请使用mod_rewrite提供的强大功能。

top

处理顺序

出现在不同作用域(context)中的别名指令以及重定向指令和其他指令一样,按照标准的合并规则进行处理。但是当多个别名指令或重定向指令出现在同一个作用域(context)中的时候(比如在同一个<VirtualHost>段),处理顺序就比较特别了:

首先,所有重定向指令都优先于别名指令被处理,因此一个匹配RedirectRedirectMatch的请求将永远不会被别名指令处理。其次,别名指令和重定向指令将按照他们在配置文件中出现的先后顺序进行匹配,并由最先匹配到的指令进行处理。

因为这个原因,当两个或两个以上的这些指令作用于同一个子路径时,你必须将最特殊的路径放在最前面,以便所有指令都能正确地生效。例如下面的例子将按照你原本的意愿正常工作:

Alias /foo/bar /baz
Alias /foo /gaq

但是,如果将上面两条指令的顺序颠倒,则后一条指令永远也得不到匹配的机会。

top

Alias 指令

说明 映射URL到文件系统的特定区域
语法 Alias URL-path file-path|directory-path
作用域 server config, virtual host
状态 基本(B)
模块 mod_alias

Alias指令使文档可以被存储在DocumentRoot以外的本地文件系统中。以(%已解码的)url-path路径开头的URL可以被映射到以directory-path开头的本地文件。

示例:

Alias /image /ftp/pub/image

对”http://myserver/image/foo.gif”的请求,服务器将返回”/ftp/pub/image/foo.gif”文件。因为仅匹配完整路径,所以上述例子不会匹配对”http://myserver/imagefoo.gif”的请求。对于使用正则表达式的匹配,请参见AliasMatch指令。

注意:如果url-path中有后缀”/”,则服务器要求有后缀”/”以扩展此别名。也就是说”Alias /icons/ /usr/local/apache/icons/“并不能对”/icons“实现别名。

注意,可能需要额外指定一个<Directory>段来覆盖别名的最终对象。由于只有出现在<Directory>段之前的别名才会被检测,所以它只对最终对象生效。(由于执行别名操作之前<Location>段会被首先扫描一次,所以它们也是有效的)

特别地,如果对在DocumentRoot之外的某个目录建立了一个Alias ,则可能需要明确的对目标目录设定访问权限。

示例:

Alias /image /ftp/pub/image
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>

top

AliasMatch 指令

说明 使用正则表达式映射URL到文件系统
语法 AliasMatch regex file-path|directory-path
作用域 server config, virtual host
状态 基本(B)
模块 mod_alias

这个指令与Alias等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果此正则表达式与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用”/icons“目录,可以:

AliasMatch ^/icons(.*) /usr/local/apache/icons$1

top

Redirect 指令

说明 发送一个外部重定向使客户端重定向到一个不同的URL
语法 Redirect [status] URL-path URL
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 基本(B)
模块 mod_alias

该指令将一个老URL映射为一个新URL,此新URL被返回到客户端使之重定向到一个新地址。

URL-path是一个(%已解码的)以”/”开头的(网络空间)绝对路径。新URL是一个(%已编码的)以”/”开头的(网络空间)绝对路径或者包含协议名和主机名的完整URL。当新URL不包含协议名和主机名时将使用与老URL-path相同的当前值。

这样,对任何以老URL-path开头的请求,将返回一个指向以新URL开头的重定向应答。

示例:

Redirect /service http://foo2.example.com/service

如果客户端请求”http://example.com/service/foo.txt”,则会被重定向到”http://foo2.example.com/service/foo.txt”。因为仅匹配完整路径,所以上述例子不会匹配”http://example.com/servicefoo.txt”请求。对于使用正则表达式的匹配,请参见RedirectMatch指令。

注意

重定向指令总是优先于Alias和ScriptAlias指令,而无论他们在配置文件中的顺序如何。

如果没有指定status参数,则重定向是”临时的”(HTTP status 302)。也就是对客户端来说,此资源的位置变动是临时性的。此status参数可以返回以下HTTP状态码:

permanent
返回一个永久性重定向状态码(301),表示此资源的位置变动是永久性的。
temp
返回一个临时性重定向状态码(302),这是默认值。
seeother
返回一个”参见”状态码(303),表示此资源已经被替代。
gone
返回一个”已废弃”状态码(410),表示此资源已经被永久性地删除了。如果指定了这个状态码,则URL参数将被忽略。

status可以被指定为数字状态以返回其他状态码。如果此状态在300-399之间,则必须提供URL参数,否则将被忽略。注意,此状态码必须是Apache已知的(参见http_protocol.c中的send_error_response函数)。

示例:

Redirect permanent /one http://example.com/two
Redirect 303 /three http://example.com/other

top

RedirectMatch 指令

说明 基于正则表达式匹配对当前的URL发送一个外部重定向
语法 RedirectMatch [status] regex URL
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 基本(B)
模块 mod_alias

该指令与Redirect等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,重定向所有GIF文件到另一个服务器上同名的JPEG文件,可以:

RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg

top

RedirectPermanent 指令

说明 发送一个外部永久重定向使客户端重定向到一个不同的URL
语法 RedirectPermanent URL-path URL
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 基本(B)
模块 mod_alias

此指令告知客户端此重定向是永久性的(status 301)。与”Redirect permanent“等效。

top

RedirectTemp 指令

说明 发送一个外部临时重定向使客户端重定向到一个不同的URL
语法 RedirectTemp URL-path URL
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 基本(B)
模块 mod_alias

此指令告知客户端此重定向只是临时性的(status 302)。与”Redirect temp“等效。

top

ScriptAlias 指令

说明 映射一个URL到文件系统并视之为CGI脚本
语法 ScriptAlias URL-path file-path|directory-path
作用域 server config, virtual host
状态 基本(B)
模块 mod_alias

ScriptAlias指令的行为与Alias指令相同,但同时它又标明此目录中含有应该由cgi-script处理器处理的CGI脚本。以URL-path开头的(%已解码的)的URL会被映射到由第二个参数指定的具有完整路径名的本地文件系统中的脚本。

示例:

ScriptAlias /cgi-bin/ /web/cgi-bin/

http://myserver/cgi-bin/foo的请求会引导服务器执行/web/cgi-bin/foo脚本。

top

ScriptAliasMatch 指令

说明 使用正则表达式映射一个URL到文件系统并视之为CGI脚本
语法 ScriptAliasMatch regex file-path|directory-path
作用域 server config, virtual host
状态 基本(B)
模块 mod_alias

该指令与ScriptAlias等效,但是它使用了标准的正则表达式,而不是简单的前缀匹配。如果regex与URL-path相匹配,则服务器会把所匹配的括弧中的字符串替换到该指令所指定的目标字符串中,并视之为一个文件名。例如,要使用标准的/cgi-bin ,可以:

ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1