apache
代码编辑器
首先需要apache开启重定向,修改httpd.conf配置:查找: Options FollowSymLinks AllowOverride None5改为: Options FollowSymLinks AllowOverride All
找到Apache配置文件去掉下面的注释 LoadModule rewrite_module modules/mod_rewrite.so //去掉行前的#
重定向的配置在哪写?有两种方式第一种是在httpd.conf中写,这种写法适合有服务器完整权限的网站管理员,写法大概如下:(请大家根据自己的项目实际情况写)
另外一种方式:在网站目录中使用.htaccess,这种方法适合采用虚拟主机形式的网站管理员。
.htaccess文件可以的事情,主要包括:文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,等等。 . 换行符以外的所有字\w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 () $1 $2 一个括号代表一个分组,第一个括号里匹配的内容就用$1引用,第二个括号匹配的内容用$2引用,以此类推......
RewriteEngine OnRewriteBase /RewriteCond %{HTTP_REFERER} !^http://(.+.)?baidu.com/ [NC] //如果来源网址不是*.baidu.comRewriteCond %{HTTP_REFERER} !^$ //并且来源网址不是空RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] //如果访问的文件后缀是jpeg,jpg,gif,bmp,png的图片,则重定向到一个固定的图片 第一行: RewriteEngine On|Off //RewriteEngine 用于开启或停用rewrite功能。 第二行: RewriteBase URL-path /*设定基准目录,例如希望对根目录下的文件rewrtie,就是”/”RewriteBase用于设定重写的基准URL。在对一个新的URL进行替换时,此模块必须把这个URL重新注入到服务器处理中。为此,它必须知道其对应的URL前缀或者说URL基准。通常,此前缀就是 对应的文件路径。但是,大多数网站URL不是直接对应于其物理文件路径的,因而一般不能做这样的假定! 所以在这种情况下, 就必须用RewriteBase指令来指定正确的URL前缀。 如果你的网站服务器URL不是与物理文件路径直接对应的,而又需要使用RewriteBase指令,则必须在每个对应的.htaccess文件中指定 RewriteRule 。*/ 第三行: RewriteCond TestString CondPattern [flags] /*1、RewriteCond: 指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令。 条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。 2、TestString: 是一个纯文本的字符串,但是还可以包含下列可扩展的成分。 3、RewriteRule反向引用: 引用方法是 $N (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。 4、RewriteCond反向引用: 引用方法是 %N (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。 5、RewriteMap 扩展: 引用方法是 ${mapname:key|default} 6、服务器变量: 引用方法是 %{ NAME_OF_VARIABLE } 这个是我们最常使用到的功能 7、CondPattern: 是条件pattern, 即, 一个应用于当前实例TestString的正则表达式, 即, TestString将会被计算然后与CondPattern匹配.可以在pattern串中使用!字符(惊叹号)来实现匹配的反转。 8、flags 参见下表*/ 第四行: RewriteRule Pattern Substitution [Flags] /*其中的Pattern就是参数,一般为一些文件的扩展名; Substitution是用来替换前面用的; 这儿的Flags,参考上面的表格,常用的R表示 redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。*/
rewritecond的其他用法:“-d”(目录) 将TestString视为一个路径名并测试它是否为一个存在的目录。“-f”(常规文件) 将TestString视为一个路径名并测试它是否为一个存在的常规文件。“-s”(非空的常规文件) 将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。“-l”(符号连接) 将TestString视为一个路径名并测试它是否为一个存在的符号连接。“-x”(可执行) 将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。“-F”(对子请求存在的文件) 检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!“-U”(对子请求存在的URL) 检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
五、更多使用举例: 1、图片重定向RewriteEngine On RewriteCond %{HTTP_HOST} ^localhost$ //如果域名是localhostRewriteCond %{REQUEST_FILENAME} !-f //并且访问的文件找不到RewriteRule ^images/(.+) http://127.0.0.1/test/showimages/$1 [R=302,L]//则跳转到另一个域名下的另一个目录访问这个图片 2、二级域名重定向到www.yourdomain.comRewriteEngine on RewriteCond %{http_host} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L] 3、网站升级时,临时错误页面RewriteEngine on RewriteCond %{REQUEST_URI} !/maintenance.html$ //如果请求的地址不是maintenance.html RewriteCond %{REMOTE_ADDR} !^123.123.123.123 //客户端ip如果不是这个 RewriteRule $ /error.html [R=302,L] //则重定向到error.html这个升级提醒页面 4、重定向RSS地址到FeedSkyRewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedSky [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feed.feedsky.com/yours 5、防止目录浏览:Options All -Indexes 6、404重定向ErrorDocument 404 /404.html 7、设置目录默认页面DirectoryIndex about.html
.htaccess的权限要设置成644