<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>浮山狼de博客 &#187; 编程</title>
	<atom:link href="https://www.fushanlang.com/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fushanlang.com</link>
	<description>next station - 下一站，活在当下，且行且思</description>
	<lastBuildDate>Sat, 29 Nov 2014 15:14:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.5</generator>
	<item>
		<title>linux查看系统64位或32位</title>
		<link>https://www.fushanlang.com/linux-view-of-system-64-or-32-2123/</link>
		<comments>https://www.fushanlang.com/linux-view-of-system-64-or-32-2123/#comments</comments>
		<pubDate>Wed, 06 Jun 2012 07:14:07 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=2123</guid>
		<description><![CDATA[<p>一、 [root@linuxzgf ~]#getconf LONG_BIT</p> <p>[root@linuxzgf ~]#getconf WORD_BIT</p> <p>（32位的系统中int类型和long类型一般都是4字节，64位的系统中int类型还是4字节的，但是long已变成了8字节inux系统中可 用&#8221;getconf WORD_BIT&#8221;和&#8221;getconf LONG_BIT&#8221;获得word和long的位数。64位系统中应该分别得到32和64。）</p> <p>二、</p> <p>[root@linuxzgf ~]#uname -a</p> <p>如果有x86_64就是64位的，没有就是32位的</p> <p>后面是X686或X86_64则内核是64位的，i686或i386则内核是32位的</p> <p>三、</p> <p>直接看看有没有/lib64目目录的方法。64位的系统会有/lib64和/lib两个目录，32位只有/lib一个。</p> <p>四、 [root@linuxzgf ~]#file /sbin/init</p> <p>/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped</p> <p>32-bit即是32位的 linux, 如是64位的, 显示的是 64-bit</p> <p>五、 [root@linuxzgf ~]#file /bin/cat</p> <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/linux-view-of-system-64-or-32-2123/">linux查看系统64位或32位</a></span>]]></description>
				<content:encoded><![CDATA[<p>一、<br />
[root@linuxzgf ~]#getconf LONG_BIT</p>
<p>[root@linuxzgf ~]#getconf WORD_BIT</p>
<p>（32位的系统中int类型和long类型一般都是4字节，64位的系统中int类型还是4字节的，但是long已变成了8字节inux系统中可 用&#8221;getconf WORD_BIT&#8221;和&#8221;getconf LONG_BIT&#8221;获得word和long的位数。64位系统中应该分别得到32和64。）</p>
<p>二、</p>
<p>[root@linuxzgf ~]#uname -a</p>
<p>如果有x86_64就是64位的，没有就是32位的</p>
<p>后面是X686或X86_64则内核是64位的，i686或i386则内核是32位的</p>
<p>三、</p>
<p>直接看看有没有/lib64目目录的方法。64位的系统会有/lib64和/lib两个目录，32位只有/lib一个。</p>
<p>四、<br />
[root@linuxzgf ~]#file /sbin/init</p>
<p>/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped</p>
<p>32-bit即是32位的 linux, 如是64位的, 显示的是 64-bit</p>
<p>五、<br />
[root@linuxzgf ~]#file /bin/cat</p>
<p>/bin/cat: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped</p>
<p>32-bit即是32位的 linux, 如是64位的, 显示的是 64-bit</p>
<p>六、<br />
[root@linuxzgf ~]#uname -m</p>
<p>x86_64</p>
<p>3.# arch</p>
<p>x86_64</p>
<p>i686</p>
<p>七、查看cpu是多少位的</p>
<p>[root@linuxzgf ~]#more /proc/cpuinfo</p>
<p>八、<br />
[root@linuxzgf ~]# echo $HOSTTYPE</p>
<p>x86_64</p>
<p>getconf命令还可以获取系统的基本配置信息，比如操作系统位数，内存大小，磁盘大小等。</p>
<p>$getconf -a 可以看到详细的系统信息</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/linux-view-of-system-64-or-32-2123/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>是什么造就了伟大的程序员(转)</title>
		<link>https://www.fushanlang.com/what-makes-a-great-programmer-rpm-1915/</link>
		<comments>https://www.fushanlang.com/what-makes-a-great-programmer-rpm-1915/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 08:44:54 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[程序员]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=1915</guid>
		<description><![CDATA[<p> 回想起来就像是在昨天。那是2000年，在数据结构课程的课堂上，Pargas博士站在前面给我们讲一些关于数据结构的话题，一个SSH的画面投影在我们前 面的墙上。有人问了一个问题，他说了一些东西，差不多是这样的话“是这样，如果你想成为一个真正的计算机科学家，你需要从现在开始就使用vi编辑器”。</p> <p>我想他是在笑谈，课后感觉他说的话并不是完全的正确，但作为年轻且容易被感染的我，回到寝室立刻就开始学习如何使用vi。学习过程不容易，花费了不少时间，但一旦掌握了其中的窍门，我发现，使用vi的确可以更快的做事情。</p> <p>时间推到6年前，那时我对TextMate十分的着迷。我的工作是做Java开发，但同时我学习Rails，在业余时间开发一些Rails项目。那时几乎所有我读的文章和观看的视频都是说明和演示如何使用TextMate来完成文本编辑工作的方法技巧的。事实上，我每天都在使用的Eclipse想要把我变成一头蠢猪。于是，我买了一台Mac电脑，开机后十分钟内我就买了一套TextMate装了上去。</p> <p>说老实话，这两种编辑器没有一种使我成为一个更好的程序员。</p> <p></p> <p>优秀的工具并不会把你变得更优秀。你使用的工具确实很重要。事实上，它们非常棒。但老虎伍兹即使用几根树枝也能把我们全部打败，梅西即使不穿鞋也能把我们踢的很惨，拉斐尔-纳达尔即使使用一个60年代产的老式木质网球拍也能把我们任何一个人打败。该死，他即使用乒乓球拍也能打败我们。技术，知识，以及锻炼出来的经验是你在与人对比中最重要的部分。</p> <p>所以，工具造就不出程序员。那什么可以呢？我想，造就一个伟大的程序员的诸多因素都依赖于你所从事的事和与你共事的人，但从很多在软件开发领域取得了巨大成功的人身上，我看到了很多共同的特征，我觉得值得与你们分享一下。我并不确定这些特征你是否能学得到，或者你天生就有，但我强烈的感觉到，如果我能花更多了时间去追求这些特征，而不是钟情于更换编辑器，我一定能取得更大的进步。</p> 以人为本 <p>我知道的最好的程序员总是把人放在第一位。他们明白他们是在为人写软件，即使那只是一些复杂系统的后台程序或协议，除了程序员没有人会用到它们。他们写文档，因为这很重要。他们帮助其它人如何使用自己的程序代码。他们愿意付出更多的努力去解决更复杂的问题来让人们以正确的方式使用他们的软件。</p> 对学习有很大的胃口 <p>神奇的程序员对知识有一种可笑的饥渴感。他们总是对你说一些新的、有趣的东西。他们习惯于大量的阅读(不论在线的还是线下的)，他们喜欢尝试，从中学到经验。他们对新出现的语言和平台毫不担忧恐惧。</p> 掌握问题规律的本领 <p>当你做开发有了一段时间后，你会发现有时出现的问题和你曾经处理过的问题看起来惊人的相似。能够识别这些问题，把过往的解决方案应用到你当前的问题上，这是一个很有用处的本领。如果每次都能改进这个方案，那是更好了。</p> <p>注意，这并不意味这你可以盲目的认为过去这个方案可行，现在它就一定可行。这种过往问题和现在出现的问题的类型匹配是很有技巧性的。你需要认真判断何时使用一个历史方案是可行的，什么时候是不行的。</p> 有一点神经质 <p>我弟弟在高中时上了一次Python课，当我问他是否喜欢这课时，他说我脑袋一定出问题了才去愿意当一名程序员，他说编程是他这辈子子做过的最无聊的一件事。从某种程度上讲，他是对的。大多数的日子里我是对着计算机说话，而不是人。想到这些要把一行一行的基本的长长短短的语句拼成一个软件，我不由的打了大大一个冷战。并不是所有的人都喜欢做这种事情，但是我知道的最优秀的程序员绝对是热爱制作软件的。</p> 执着 <p>软件开发是一个实际上比任何人的想像都要缓慢的开发过程。它很费时间。有时候你必须要有最够的耐心去精雕细琢出你需要的代码。有时，作为程序员，我们会写出非常有趣的代码，但也有时候，我们不得不哭丧着脸去写一大堆过去曾经写过的代码。想想伟大的程序员之所以能坚持下来，是因为他们能看到他们所从事的事业的大蓝景，他们喜欢这一点一点走向目标的开发过程。</p> <p>这就是我想到的构成一个优秀程序员的一些特征，但这并不是全部，所以我想听听你的观点。你认为是什么使一个程序员变的优秀？</p> <p>感谢espensorvik提供的优秀的图片！ 本文原始地址：是什么造就了伟大的程序员？</p> ]]></description>
				<content:encoded><![CDATA[<p> 回想起来就像是在昨天。那是2000年，在数据结构课程的课堂上，Pargas博士站在前面给我们讲一些关于数据结构的话题，一个SSH的画面投影在我们前 面的墙上。有人问了一个问题，他说了一些东西，差不多是这样的话“是这样，如果你想成为一个真正的计算机科学家，你需要从现在开始就使用vi编辑器”。</p>
<p>我想他是在笑谈，课后感觉他说的话并不是完全的正确，但作为年轻且容易被感染的我，回到寝室立刻就开始学习如何使用vi。学习过程不容易，花费了不少时间，但一旦掌握了其中的窍门，我发现，使用vi的确可以更快的做事情。</p>
<p>时间推到6年前，那时我对TextMate十分的着迷。我的工作是做Java开发，但同时我学习Rails，在业余时间开发一些Rails项目。那时几乎所有我读的文章和观看的视频都是说明和演示如何使用TextMate来完成文本编辑工作的方法技巧的。事实上，我每天都在使用的Eclipse想要把我变成一头蠢猪。于是，我买了一台Mac电脑，开机后十分钟内我就买了一套TextMate装了上去。</p>
<p>说老实话，这两种编辑器没有一种使我成为一个更好的程序员。<span id="more-1915"></span></p>
<p><img title="keyboard" src="http://www.fushanlang.com/blog/wp-content/uploads/auto_save_image/2011/06/084456Xyd.jpg" alt="Crazy Awesome Keyboard! Yeah!" /></p>
<p>优秀的工具并不会把你变得更优秀。你使用的工具确实很重要。事实上，它们非常棒。但老虎伍兹即使用几根树枝也能把我们全部打败，梅西即使不穿鞋也能把我们踢的很惨，拉斐尔-纳达尔即使使用一个60年代产的老式木质网球拍也能把我们任何一个人打败。该死，他即使用乒乓球拍也能打败我们。技术，知识，以及锻炼出来的经验是你在与人对比中最重要的部分。</p>
<p>所以，工具造就不出程序员。那什么可以呢？我想，造就一个伟大的程序员的诸多因素都依赖于你所从事的事和与你共事的人，但从很多在软件开发领域取得了巨大成功的人身上，我看到了很多共同的特征，我觉得值得与你们分享一下。我并不确定这些特征你是否能学得到，或者你天生就有，但我强烈的感觉到，如果我能花更多了时间去追求这些特征，而不是钟情于更换编辑器，我一定能取得更大的进步。</p>
<h3>以人为本</h3>
<p>我知道的最好的程序员总是把人放在第一位。他们明白他们是在为人写软件，即使那只是一些复杂系统的后台程序或协议，除了程序员没有人会用到它们。他们写文档，因为这很重要。他们帮助其它人如何使用自己的程序代码。他们愿意付出更多的努力去解决更复杂的问题来让人们以正确的方式使用他们的软件。</p>
<h3>对学习有很大的胃口</h3>
<p>神奇的程序员对知识有一种可笑的饥渴感。他们总是对你说一些新的、有趣的东西。他们习惯于大量的阅读(不论在线的还是线下的)，他们喜欢尝试，从中学到经验。他们对新出现的语言和平台毫不担忧恐惧。</p>
<h3>掌握问题规律的本领</h3>
<p>当你做开发有了一段时间后，你会发现有时出现的问题和你曾经处理过的问题看起来惊人的相似。能够识别这些问题，把过往的解决方案应用到你当前的问题上，这是一个很有用处的本领。如果每次都能改进这个方案，那是更好了。</p>
<p>注意，这并不意味这你可以盲目的认为过去这个方案可行，现在它就一定可行。这种过往问题和现在出现的问题的类型匹配是很有技巧性的。你需要认真判断何时使用一个历史方案是可行的，什么时候是不行的。</p>
<h3>有一点神经质</h3>
<p>我弟弟在高中时上了一次Python课，当我问他是否喜欢这课时，他说我脑袋一定出问题了才去愿意当一名程序员，他说编程是他这辈子子做过的最无聊的一件事。从某种程度上讲，他是对的。大多数的日子里我是对着计算机说话，而不是人。想到这些要把一行一行的基本的长长短短的语句拼成一个软件，我不由的打了大大一个冷战。并不是所有的人都喜欢做这种事情，但是我知道的最优秀的程序员绝对是热爱制作软件的。</p>
<h3>执着</h3>
<p>软件开发是一个实际上比任何人的想像都要缓慢的开发过程。它很费时间。有时候你必须要有最够的耐心去精雕细琢出你需要的代码。有时，作为程序员，我们会写出非常有趣的代码，但也有时候，我们不得不哭丧着脸去写一大堆过去曾经写过的代码。想想伟大的程序员之所以能坚持下来，是因为他们能看到他们所从事的事业的大蓝景，他们喜欢这一点一点走向目标的开发过程。</p>
<p>这就是我想到的构成一个优秀程序员的一些特征，但这并不是全部，所以我想听听你的观点。你认为是什么使一个程序员变的优秀？</p>
<p><em>感谢espensorvik提供的优秀的图片！<br />
</em>本文原始地址：是什么造就了伟大的程序员？</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/what-makes-a-great-programmer-rpm-1915/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascript return语句在函数之外解决方法</title>
		<link>https://www.fushanlang.com/javascript-return-statement-outside-the-function-solution-1673/</link>
		<comments>https://www.fushanlang.com/javascript-return-statement-outside-the-function-solution-1673/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 01:41:23 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=1673</guid>
		<description><![CDATA[javascript 加载报错 return语句在函数之外（IE） <p>一般很少遇到这个错误提示，我再本地测试时没有报错，上传到国外主机linux服务器上，打开页面加载就会报错，所以确定“肯定不是函数执行错误。”其实最变态的是好像只有IE会给出这么弱智的报错。</p> <p>百度、google了一番之后，捉摸出了问题所在：</p> <p>同样的js，同样的utf8格式，html页面charset 指定为gb2312的页面出了问题，而charset=utf8的页面，没有报错。解决方案有两种：</p> <p>第一种方案：charset为gb2312页面里加载的javascript代码（直接写入到html页script标签中而非通过src加载的）中含有中文注释，IE下发现了这些中文注释，后就会报错。去掉中文注释，然后保存为utf8文件格式即可。</p> <p>第二种方案:   charset为gb2312的页面用编辑器如editplus，或ultraedit编辑器保存为UTF8+Bom格式，此时即便是带着中文注释，IE也不会报错了。 </p> <p>当然，如果是html页面中没有script标签内的js代码，而是通过src引入js文件，则不会出现这种报错。以上两种方案，希望对需要的朋友有用！</p> ]]></description>
				<content:encoded><![CDATA[<h2>javascript 加载报错 return语句在函数之外（IE）</h2>
<p>一般很少遇到这个错误提示，我再本地测试时没有报错，上传到国外主机linux服务器上，打开页面加载就会报错，所以确定“肯定不是函数执行错误。”其实最变态的是好像<strong>只有IE会给出这么弱智的报错。</strong></p>
<p>百度、google了一番之后，捉摸出了问题所在：</p>
<p>同样的js，同样的utf8格式，html页面charset 指定为gb2312的页面出了问题，而charset=utf8的页面，没有报错。解决方案有两种：</p>
<p><strong>第一种方案：</strong>charset为gb2312页面里加载的javascript代码（直接写入到html页script标签中而非通过src加载的）中<strong>含有中文注释</strong>，IE下发现了这些中文注释，后就会报错。去掉中文注释，然后保存为utf8文件格式即可。</p>
<p><strong>第二种方案:</strong>   charset为gb2312的页面用编辑器如editplus，或ultraedit编辑器保存为UTF8+Bom格式，此时即便是<strong>带着中文注释</strong>，IE也不会报错了。 </p>
<p>当然，如果是html页面中没有script标签内的js代码，而是通过src引入js文件，则不会出现这种报错。以上两种方案，希望对需要的朋友有用！</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/javascript-return-statement-outside-the-function-solution-1673/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>浅谈php的优缺点</title>
		<link>https://www.fushanlang.com/advantages-and-disadvantages-of-php-1106/</link>
		<comments>https://www.fushanlang.com/advantages-and-disadvantages-of-php-1106/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 13:49:28 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[感悟]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=1106</guid>
		<description><![CDATA[当我们演习一些流行的php框架，或者在某些框架之上的作品时，需要学习也是php编程设计的流程，而不是某个邮件函数时如何发邮件的，发丢了怎么办。所以说php确实很NB，淘宝，yahoo，163也用php，但是人家用的语言版本跟你一样，人家的代码缩进语法跟你一样，不好意思，你还是无法自己写出淘宝，yahoo，163来。我们需要学的就是这个。 <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/advantages-and-disadvantages-of-php-1106/">浅谈php的优缺点</a></span>]]></description>
				<content:encoded><![CDATA[<p>php语法快速上手，平时参照函数手册，外加MVC或其他快速框架约束，或者干脆不用框架就自己按自己的意愿来也可以。php如此灵活多变的优点注定了它最要命的缺点，就是很多人phper写出了大量难于维护和扩展的代码，当然这也促使着php自身不断完善，以阻止这些垃圾代码的出现。</p>
<p>简言之就是，c、c++很难，仅仅学习和使用c在linux下的第三方库或者c++的所有特性就够一般人折腾一阵子了，花费周期长，在这段时间里会接触到如何书写和设计流程的问题，或者说c/c++的流程很多经典模式已经功成名就，所以但一旦掌握c/c++了就会如履平地。<span id="more-1106"></span></p>
<p>php简单易学易用，几乎不花什么心思学习语法，语法太简单了没啥学头，然而极易滥用。很多人在三天以内就可以轻松写几行php代码，函数想不起来怎么用，参数位置什么的，简单一查手册搞定。实际上到了php这里，难住我们已经不是语言本身了，而是我们自己如何编程设计的问题，php不像c语言，有着几十年的开发，几代程序员的累积，我们的大学算法课程几乎都采用c或者c++，而不是php、javascript或者其他脚本语言。到了php这里我们面对不再是解决某个算法问题，而是直接面向终端产品，我们的成果最后会在客户的网页浏览器里一目了然。所以学习php更注重编程思路，各个模块之间调用流程的东西，而不是模块里的某个过滤字符串函数如何实现效率更高的问题。</p>
<p>当我们演习一些流行的php框架，或者在某些框架之上的作品时，需要学习也是php编程设计的流程，而不是某个邮件函数时如何发邮件的，发丢了怎么办。所以说php确实很NB，淘宝，yahoo，163也用php，但是人家用的语言版本跟你一样，人家的代码缩进语法跟你一样，不好意思，你还是无法自己写出淘宝，yahoo，163来。我们需要学的就是这个。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/advantages-and-disadvantages-of-php-1106/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>htaccess Rewrite重定向</title>
		<link>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/</link>
		<comments>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 01:30:37 +0000</pubDate>
		<dc:creator><![CDATA[fushanlang]]></dc:creator>
				<category><![CDATA[webserver]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[重定向]]></category>

		<guid isPermaLink="false">http://www.fushanlang.com/blog/?p=1097</guid>
		<description><![CDATA[<p>最近在弄htaccess Rewrite重定向，很多语法生疏了，有找了一番，分享一下。 </p> RewriteEngine On&#124;Off <p>RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。 rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。</p> RewriteBase URL-path <p>RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。 在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。 如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。</p> RewriteCond TestString CondPattern <p>RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。 Notice:All of these tests can also be prefixed by an exclamation mark (&#8216;!&#8217;) to negate their meaning. 在正则表达式中，如果取反的话要用^,在这里需要用!号取反 </p> RewriteOptions Options <p>Sets some special options for the rewrite <span style="color:#777"> . . . &#8594; Read More: <a href="https://www.fushanlang.com/htaccess-rewrite-redirect-1097/">htaccess Rewrite重定向</a></span>]]></description>
				<content:encoded><![CDATA[<p>最近在弄htaccess Rewrite重定向，很多语法生疏了，有找了一番，分享一下。 </p>
<h4>RewriteEngine On|Off</h4>
<p>RewriteEngine 可用On 或者 Off 打开或关闭rewrite功能。<br />
rewrite configurations 不会继承，所以你得给每个你想用 rewrite功能的virtual host加上这个指令。</p>
<h4>RewriteBase URL-path<span id="more-1097"></span></h4>
<p>RewriteBase指令显式地设置了目录级重写的基准URL。在下文中，你可以看见RewriteRule可以用于目录级的配置文件中(.htaccess)并在局部范围内起作用，即规则实际处理的只是剥离了本地路径前缀的一部分。处理结束后，这个路径会被自动地附着回去。默认值是&#8221;RewriteBase physical-directory-path&#8221;。<br />
在对一个新的URL进行替换时，此模块必须把这个URL重新注入到服务器处理中。为此，它必须知道其对应的URL前缀或者说URL基准。通常，此前缀就是对应的文件路径。但是，大多数网站URL不是直接对应于其物理文件路径的，因而一般不能做这样的假定! 所以在这种情况下，就必须用RewriteBase指令来指定正确的URL前缀。<br />
如果你的网站服务器URL不是与物理文件路径直接对应的，而又需要使用RewriteBase指令，则必须在每个对应的.htaccess文件中指定RewriteRule 。</p>
<h4>RewriteCond TestString CondPattern</h4>
<p>RewriteCond指令定义了一个规则的条件，即在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。<br />
<strong>Notice:All of these tests can also be prefixed by an exclamation mark (&#8216;!&#8217;) to negate their meaning. </strong><strong>在正则表达式中，如果取反的话要用^,在这里需要用!号取反 </strong></p>
<h4>RewriteOptions Options</h4>
<p>Sets some special options for the rewrite engine.<br />
设定一些特殊的选项给rewrite.<br />
The Option string can be currently only one:inherit<br />
inherit<br />
此值强制当前配置可以继承其父配置。 在虚拟主机级配置中，它意味着主服务器的映射表、条件和规则可以被继承。 在目录级配置中，它意味着其父目录的.htaccess中的条件和规则可以被继承。<br />
MaxRedirects=number<br />
为了避免目录级RewriteRule的无休止的内部重定向， 在此类重定向和500内部服务器错误次数达到一个最大值的时候， mod_rewrite会停止对此请求的处理。 如果你确实需要对每个请求允许大于10次的内部重定向，可以增大这个值。<br />
This forces the current configuration to inherit the configuration of the parent.<br />
强制当前的配置继承它parent的配置。<br />
在per-virtual-server环境下，意味着maps, conditions , rules会被继承!<br />
在per-directory 环境下 意味着它父目录的.htaccess配置中的conditions , rules 会被继承!</p>
<h4>RewriteRule Pattern Substitution [flags]</h4>
<p>Text:<br />
. 任何单字符<br />
[chars] Character class: One of chars<br />
[^chars] Character class: None of chars<br />
text1|text2 两者选一个: text1 or text2</p>
<p>Quantifiers:量词<br />
? 0 or 1 of the 前面的 text<br />
* 0 or N of the 前面的 text (N &gt; 0)<br />
+ 1 or N of the 前面的 text (N &gt; 1)</p>
<p>Grouping:<br />
(text) Grouping of text</p>
<p>可用$N来得到()中的内容:<br />
( (a|b) | (c|d))<br />
$1 $2 $3</p>
<p>Anchors:<br />
^ Start of line anchor<br />
$ End of line anchor</p>
<p>Escaping:<br />
\char escape that particular char<br />
(for instance to specify the chars &#8220;.[]()&#8221; etc.)</p>
<p>注意：没有并且&amp;</p>
<p>=========================================================================================<br />
<strong>flags</strong> </p>
<ol>
<li>
<h4>&#8216;redirect|R [=code]&#8217; (强制重定向 redirect)</h4>
<p>以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定，则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码，只需在此指定这个数值即可， 另外，还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端，如, 重写&#8220;/~&#8221;为 &#8220;/u/&#8221;，或对/u/user加上斜杠，等等。 注意: 在使用这个标记时，必须确保该替换字段是一个有效的URL! 否则，它会指向一个无效的位置! 并且要记住，此标记本身只是对URL加上 http://thishost[:thisport]/的前缀，重写操作仍然会继续。 通常，你会希望停止重写操作而立即重定向，则还需要使用&#8217;L&#8217;标记.</li>
<li>
<h4>&#8216;forbidden|F&#8217; (强制URL为被禁止的 forbidden)</h4>
<p>强制当前URL为被禁止的，即，立即反馈一个HTTP响应代码403(被禁止的)。 使用这个标记，可以链接若干RewriteConds以有条件地阻塞某些URL。</li>
<li>
<h4>&#8216;gone|G&#8217; (强制URL为已废弃的 gone)</h4>
<p>强制当前URL为已废弃的，即，立即反馈一个HTTP响应代码410(已废弃的)。 使用这个标记，可以标明页面已经被废弃而不存在了.</li>
<li>
<h4>&#8216;proxy|P&#8217; (强制为代理 proxy)</h4>
<p>此标记使替换成分被内部地强制为代理请求，并立即(即， 重写规则处理立即中断)把处理移交给代理模块。 你必须确保此替换串是一个有效的(比如常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。 使用这个标记，可以把某些远程成分映射到本地服务器名称空间， 从而增强了ProxyPass指令的功能。 注意: 要使用这个功能，代理模块必须编译在Apache服务器中。 如果你不能确定，可以检查&#8220;httpd -l&#8221;的输出中是否有mod_proxy.c。 如果有，则mod_rewrite可以使用这个功能； 如果没有，则必须启用mod_proxy并重新编译&#8220;httpd&#8221;程序。</li>
<li>
<h4>&#8216;last|L&#8217; (最后一个规则 last)</h4>
<p>立即停止重写操作，并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例，使用它可以重写根路径的URL(&#8216;/&#8217;)为实际存在的URL, 比如, &#8216;/e/www/&#8217;.</li>
<li>
<h4>&#8216;next|N&#8217; (重新执行 next round)</h4>
<p>重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了，而是经最后一个重写规则处理的URL。 它对应于Perl中的next命令或C语言中的continue命令。 此标记可以重新开始重写操作，即, 立即回到循环的头部。但是要小心，不要制造死循环!</li>
<li>
<h4>&#8216;chain|C&#8217; (与下一个规则相链接 chained)</h4>
<p>此标记使当前规则与下一个(其本身又可以与其后继规则相链接的， 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配，通常会继续处理其后继规则， 即，这个标记不起作用；如果规则不能被匹配， 则其后继的链接的规则会被忽略。比如，在执行一个外部重定向时， 对一个目录级规则集，你可能需要删除&#8220;.www&#8221; (此处不应该出现&#8220;.www&#8221;的)。</li>
<li>
<h4>&#8216;type|T=MIME-type&#8217; (强制MIME类型 type)</h4>
<p>强制目标文件的MIME类型为MIME-type。 比如，它可以用于模拟mod_alias中的ScriptAlias指令， 以内部地强制被映射目录中的所有文件的MIME类型为&#8220;application/x-httpd-cgi&#8221;.</li>
<li>
<h4>&#8216;nosubreq|NS&#8217; (仅用于不对内部子请求进行处理 no internal sub-request)</h4>
<p>在当前请求是一个内部子请求时，此标记强制重写引擎跳过该重写规则。 比如，在mod_include试图搜索可能的目录默认文件(index.xxx)时， Apache会内部地产生子请求。对子请求，它不一定有用的，而且如果整个规则集都起作用， 它甚至可能会引发错误。所以，可以用这个标记来排除某些规则。 根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀，以强制它们由CGI脚本处理， 而对子请求处理的出错率(或者开销)很高，在这种情况下，可以使用这个标记。</li>
<li>
<h4>&#8216;nocase|NC&#8217; (忽略大小写 no case)</h4>
<p>它使Pattern忽略大小写，即, 在Pattern与当前URL匹配时，&#8217;A-Z&#8217; 和&#8217;a-z&#8217;没有区别。</li>
<li>
<h4>&#8216;qsappend|QSA&#8217; (追加请求串 query string append)</h4>
<p>此标记强制重写引擎在已有的替换串中追加一个请求串，而不是简单的替换。 如果需要通过重写规则在请求串中增加信息，就可以使用这个标记。</li>
<li>
<h4>&#8216;noescape|NE&#8217; (在输出中不对URI作转义 no URI escaping)</h4>
<p>此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下，特殊字符(如&#8217;%&#8217;, &#8216;$&#8217;, &#8216;;&#8217;等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义，以允许百分号等符号出现在输出中，如： RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]<br />
可以使&#8217;/foo/zed&#8217;转向到一个安全的请求&#8217;/bar?arg=P1=zed&#8217;.</li>
<li>
<h4>&#8216;passthrough|PT&#8217; (移交给下一个处理器 pass through)</h4>
<p>此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值，它只是一个小修改，使之能对来自其他URI到文件名翻译器的 Alias，ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子： 如果要通过mod_rewrite的重写引擎重写/abc为/def， 然后通过mod_alias使/def转变为/ghi，可以这样: RewriteRule ^/abc(.*) /def$1 [PT]<br />
Alias /def /ghi<br />
如果省略了PT标记，虽然mod_rewrite运作正常， 即, 作为一个使用API的URI到文件名翻译器， 它可以重写uri=/abc/&#8230;为filename=/def/&#8230;， 但是，后续的mod_alias在试图作URI到文件名的翻译时，则会失效。<br />
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时， 就必须使用这个标记。混合使用mod_alias和mod_rewrite就是个典型的例子。</p>
<div>For Apache hackers<br />
如果当前Apache API除了URI到文件名hook之外，还有一个文件名到文件名的hook， 就不需要这个标记了! 但是，如果没有这样一个hook，则此标记是唯一的解决方案。 Apache Group讨论过这个问题，并在Apache 2.0 版本中会增加这样一个hook。</div>
</li>
<li>
<h4>&#8216;skip|S=num&#8217; (跳过后继的规则 skip)</h4>
<p>此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句，而被跳过的skip=N个规则是else从句. (它和&#8217;chain|C&#8217;标记是不同的!)</li>
<li>
<h4>&#8216;env|E=VAR:VAL&#8217; (设置环境变量 environment variable)</h4>
<p>此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。 此标记可以多次使用以设置多个变量。 这些变量可以在其后许多情况下被间接引用，但通常是在XSSI (via or CGI (如 $ENV{&#8216;VAR&#8217;})中， 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。 使用它可以从URL中剥离并记住一些信息。</li>
<li>
<h4>&#8216;cookie|CO=NAME:VAL:domain[:lifetime[:path]]&#8217; (设置cookie)</h4>
<p>它在客户端浏览器上设置一个cookie。 cookie的名称是NAME，其值是VAL。 domain字段是该cookie的域，比如&#8217;.apache.org&#8217;, 可选的lifetime是cookie生命期的分钟数， 可选的path是cookie的路径。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>https://www.fushanlang.com/htaccess-rewrite-redirect-1097/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.205 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2025-12-17 17:17:08 -->
