htaccess URL重写rewrite与重定向redirect(转)
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(转)的更多相关文章
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)
目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上. 实现所有这些神奇 ...
- .htaccess技巧: URL重写(Rewrite)与重定向
URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上.有关htacces ...
- openresty开发系列33--openresty执行流程之3重写rewrite和重定向
openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:i ...
- nginx url重写 rewrite实例
本文介绍下,在nginx中实现Url重写,学习rewrite的具体用法,有需要的朋友参考下吧. 原文地址:http://www.360doc.com/content/14/0202/20/142341 ...
- nginx的url重写[rewrite规则和参考]
本日志内容来自互联网和平日使用经验,整理一下方便日后参考. Nginx Rewrite 相关指令有 if.rewrite.set.return 等. if 的语法 应用于 server 和 locat ...
- 很不错的NGINX URL重写实例
转自:http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewrite ...
- nginx 常用的 URL 重写方法
转自:http://www.jbxue.com/article/4727.html Nginx中一些常用的URL 重写方法介绍,有需要的朋友可以参考下.url重写应该不陌生,不管是SEO URL 伪静 ...
- 从URL重写中学习正则表达式
起因: 最近因为业务上的需求,老板要求改写网站的域名.要求把所有的二级域名中的内容放到主域名下,增加资源集中程度,有利于搜索引擎的优化. so.网站中所有的URL定向都要重写,也就是我们所说的伪静态的 ...
随机推荐
- 80端口被占用 PID = 4解决办法
请按照下面的步骤来运行命令:1. sc config http stat = demand2. reboot3. run the command(netsh http show servicestat ...
- 完美PNG半透明窗体解决方案
当年Vista系统刚出来的时候,最吸引人的莫过于半透明磨砂的窗体界面了,迷倒了多少人.这个界面技术随即引发了编程界的一阵骚动,很多人都在问:如何实现这一界面效果?当然,在Vista下倒是很简单,系统本 ...
- Github Https方式push错误”Empty reply from server”
1 2 3 4 5 6 7 8 9 10 2014-11-19 20:41:30.130 GitHub for Mac Login[2595:326257] AskPass ...
- UnixODBC
UnixODBC下载安装地址:http://www.unixodbc.org/ DOWNLOAD Distribution Format unixODBC is currently availible ...
- RunLoop-b
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...
- Ruby自学笔记(五)— 条件判断
条件判断,在编程语言中都存在,而Ruby中的条件判断和Java中类似,当然还是存在些许差别 Ruby中条件判断的条件: 1) 可以使用 ==,<,>等比较运算来作为条件,比较运算可以返回t ...
- C# WinForm的SplitContainer控件固定Panel大小[转]
原文地址:http://zhidao.baidu.com/link?url=mhkUszZ8am_vqNX3KAOff-psd3af7Xl3DL77KxJ-rWIAqIArQHzQIEBoX49mQA ...
- ctr预估模型
http://wenku.baidu.com/course/view/1488bfd5b9f3f90f76c61b8d
- cf C. Inna and Candy Boxes
题意:给你一个长度为n的只含有1和0的字符串,w个询问,每次询问输入l,r:在[l,r]中在l+k-1.l+2*k-1.......r的位置都必须为1,如果不为1的,变成1,记为一次操作,其它的地方的 ...
- 4. Repeater 实例2
设计管理一个用户程序,对用户的状态进行管理,当用户状态是启用时整行显示红色. 设计思路:用Repeater遍历每行记录,在操作状态的表格中旋转两个按钮,一个为启用功能,另一个为禁用功能,根据Repea ...