1. 将 .htm 页面映射到 .php

1 Options +FollowSymlinks
2 RewriteEngine on
3 RewriteRule ^(.*)\.htm$ $1.php [NC]

如果正则不是很熟悉,可以参考下《正则表达式入门》

一些注意事项:

  • 该RewriteRule能够将.htm静态页面映射到.php动态页面。
  • 如果通过.htm进入,浏览器地址栏显示的是.htm扩展名,但服务器上实际执行的是.php。
  • 必须保证服务器上有对应的.php,否则会404。
  • 浏览器和搜索引擎可以同时通过.htm和.php访问网页。
  • 如果该目录上存在.htm,将被忽略。
  • [NC]表示“不区分大小写”。

2. 临时重定向(R=302)

1 RewriteEngine on
2 RewriteBase /
3 RewriteRule ^(.*)\.htm$ $1.php [R,NC,L]

一些注意事项:

  • 该RewriteRule能够将.htm静态页面重定向到.php动态页面。
  • 如果通过.htm进入,浏览器地址栏会自动转为.php(请与上面的[NC]区别开来),这也是重定向的本质。
  • 必须保证服务器上有对应的.php,否则会404。
  • 浏览器和搜索引擎可以同时通过.htm和.php访问网页。
  • 如果该目录上存在.htm,将被忽略。
  • RewriteBase定义了重写基准目录。例如,如果你将虚拟站点设置在/var/www目录下,删除这行将会导致重定向到http://yourdomain.com/var/www/1.php。显然这是找不到的,而且你也不会希望用户看见你的服务器的目录结构。
  • 再举个例子,如果RewriteBase /base/,那么将会重定向到http://yourdomain.com/base/1.php。
  • 对于重写基准目录,我们还可以通过将$1.php变成/$1.php实现直接变换,这时就可以将RewriteBase省略。
  • 字母R表示临时重定向,相当于[R=302,NC]。
  • 字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则。

3. 永久重定向(R=301)

在讨论R=302临时重定向后,理解R=301永久重定向也就容易多了:

1 RewriteEngine on
2 RewriteRule ^(.*)$ http://www.nowamagic.net/$1 [R=301,NC,L]
  • 这个规则告诉浏览器和搜索引擎,网站地址发生了永久性变更,用户的URL请求将会被发送给新的域名(主机)处理。
  • 由于是重定向到新的主机地址,RewriteBase也就没有出现的必要了。

4. 为什么要用重定向?

重定向和URL重写的区别:

  • 通过重定向,浏览器知道页面位置发生变化,从而改变地址栏显示的地址。
  • 通过重定向,搜索引擎意识到页面被移动了,从而更新搜索引擎索引,将原来失效的链接从搜索结果中移除。
  • 临时重定向(R=302)和永久重定向(R=301)都是亲搜索引擎的,是SEO的重要技术。
  • URL重写用于将页面映射到本站另一页面,若重写到另一网络主机(域名),则按重定向处理。

5. 长短地址转换

利用URL重写,我们可以很方便地实现长短地址的转换,但是用重定向就不合适了。

1 RewriteEngine On
2 RewriteRule ^grab /public/files/download/download.php

若访问 http://mysite/grab?file=my.zip,则会执行该页面:http://mysite/public/files/download/download.php?file=my.zip

6. 去掉www

1 Options +FollowSymlinks
2 RewriteEngine on
3 RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
4 RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]

7. 加上www

1 RewriteEngine On
2 RewriteCond %{HTTP_HOST} ^(.*)$
3 RewriteRule (.*) http://www\.%1/$1 [R=301,L]

8. 支持多域名访问

如果你不凑巧买到了不支持多域名的主机,那么.htaccess或许可以帮助你。现在假设你有域名domain-one.com和domain-two.com,并且在服务器根目录有对应文件夹one和two,那么通过下面的改写就能让Apache同时接受者两个域名的请求:

1 #two domains served from one root..
2 RewriteCond %{HTTP_HOST} domain-one.com
3 RewriteCond %{REQUEST_URI} !^/one
4 RewriteRule ^(.*)$ /one/$1 [L]
5  
6 RewriteCond %{HTTP_HOST} domain-two.com
7 RewriteCond %{REQUEST_URI} !^/two
8 RewriteRule ^(.*)$ /two/$1 [L]
  •  
    上面介绍了.htaccess 常见的八个重写功能,当然还有更多,但大部分都可以从这里延伸出来。你也可以从这里启发,用 htaccess 实现更多的功能。

htaccess URL重写rewrite与重定向redirect(转)的更多相关文章

  1. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)

    目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...

  2. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)

    URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上. 实现所有这些神奇 ...

  3. .htaccess技巧: URL重写(Rewrite)与重定向

    URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上.有关htacces ...

  4. openresty开发系列33--openresty执行流程之3重写rewrite和重定向

    openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:i ...

  5. nginx url重写 rewrite实例

    本文介绍下,在nginx中实现Url重写,学习rewrite的具体用法,有需要的朋友参考下吧. 原文地址:http://www.360doc.com/content/14/0202/20/142341 ...

  6. nginx的url重写[rewrite规则和参考]

    本日志内容来自互联网和平日使用经验,整理一下方便日后参考. Nginx Rewrite 相关指令有 if.rewrite.set.return 等. if 的语法 应用于 server 和 locat ...

  7. 很不错的NGINX URL重写实例

    转自:http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewrite ...

  8. nginx 常用的 URL 重写方法

    转自:http://www.jbxue.com/article/4727.html Nginx中一些常用的URL 重写方法介绍,有需要的朋友可以参考下.url重写应该不陌生,不管是SEO URL 伪静 ...

  9. 从URL重写中学习正则表达式

    起因: 最近因为业务上的需求,老板要求改写网站的域名.要求把所有的二级域名中的内容放到主域名下,增加资源集中程度,有利于搜索引擎的优化. so.网站中所有的URL定向都要重写,也就是我们所说的伪静态的 ...

随机推荐

  1. 使用PHP预定义变量得到url地址及相关参数

    获取url地址栏参数多种方法:$_SERVER["SERVER_PORT"]//获取端口$_SERVER['HTTP_HOST']//获取域名或主机地址 如www.sina.com ...

  2. 常用jQuery选择器总结【转】

    在Dom 编程中我们只能使用有限的函数根据id 或者TagName 获取Dom 对象. 然而在jQuery 中则完全不同,jQuery 提供了异常强大的选择器用来帮助我们获取页面上的对象, 并且将对象 ...

  3. IOS各类问题

    1.The resource could not be loaded because the App Transport Security policy requires the use of a s ...

  4. 嵌套JSON 取出name与value

    好久不用都忘了 mark下   $.each( { name: "John", lang: "JS" }, function(i, n){ alert( &qu ...

  5. SQL联合索引 与 单一列的索引

    SQL联合索引 与 单一列的索引 标签: sqlwebobjectstatistics优化磁盘 2012-06-12 13:46 27992人阅读 评论(1) 收藏 举报  分类: 数据库(94)  ...

  6. 用C++进行函数式编程

    http://www.programmer.com.cn/12717/   文 / John Carmack 译 / 王江平 <Quake>作者Carmack认为追求函数式的程序设计有着实 ...

  7. hibernate spring sturts2配置

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  8. BZOJ 3575 道路堵塞

    Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有从 ...

  9. 查看Redis信息和状态

    原文转自:http://redisdoc.com/server/info.html INFO [section] 以一种易于解释(parse)且易于阅读的格式,返回关于 Redis 服务器的各种信息和 ...

  10. java学习之函数

    讲完了语句结构还有运算符.变量,下面我们来了解下函数. 那么什么是函数,函数的定义是怎样的呢? 函数的定义: 函数是指在类当中定义的一段有特殊功能的代码段,同时函数在类中也被成为方法. class F ...