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. 极简主义,对逻辑操作符||和&&深度运用的理解

    丧心病狂的代码压缩好像违背了愉快阅读的本真,所以刨根问底想要了解个究竟,最后发现这不只是前端大牛装逼卖萌的绝技,也是代码洁癖爱好者的利器,毕竟这样看上去确实蛮优雅的; 一开始,我们接触到的代码是这样的 ...

  2. Wdcp缺少mod_rewite模块

    1.下载apache源码包,解压并查找到mod_rewrite.c文件 tar -zxvf httpd-2.2.27.tar.gz cd httpd-2.2.27 [root@localhost ht ...

  3. QTP插入Output Value和插入CheckPoint,注意点

    1. 必须打开程序才能进行Output value和CheckPoint的插入. 2. 也有可能是对象获取不到,从新加载对象库. 提示如下图:

  4. C#面试-关于const和readonly(看了一个点赞很多的帖子有感而发!)

    前景提要: 最近大家都在面试,讨论最多.最基础的问题,莫过于“关于const和readonly常见的笔试题剖析”,等等的大牛解析.我就是一个小菜,只不过,有点不敢苟同大牛的意见.废话少说,进入重点. ...

  5. [BZOJ 2821] 作诗(Poetize) 【分块】

    题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...

  6. 【转】SharePoint 2013 stand alone服务器安装

    原文地址:http://www.cnblogs.com/jianyus/archive/2013/02/01/2889653.html  介绍:文章就是SharePoint2013安装过程的图解,包括 ...

  7. Knight Tournament

    Codeforces Round #207 (Div. 1) A:http://codeforces.com/problemset/problem/356/A 题意:给你n匹马,然后有m场比赛.每场比 ...

  8. Jenkins安装入门

    这是一次兴奋之旅哈..说不定用得着呢~~~:) 嘿嘿.. 安装很简单,JDK,MAVEN(如果),YUM或RPM包安装JENKINS(因为好像YUM安装好慢,不如RPM下载安装) 参考URL: htt ...

  9. MySQL使用rand函数实现随机数

    sql 的随机函数newID()和RAND() sql server的随机函数newID()和RAND() SELECT * FROM Northwind..Orders ORDER BY NEWID ...

  10. RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读

    Session 1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> select * from ...