使用.htaccess实现apache URL重定向
一、什么是URL重定向?
URL重定向(URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术。
二、URL重定向怎么配置?
1)首先需要apache开启重定向,修改httpd.conf配置:
查找:
Options FollowSymLinks
AllowOverride None
改为:
Options FollowSymLinks
AllowOverride All
2)去掉下面的注释
LoadModule rewrite_module modules/mod_rewrite.so //去掉行前的#
3)重定向的配置在哪写?
有两种方式,第一种是在httpd.conf中写,这种写法适合有服务器完整权限的网站管理员,写法大概如下:
<VirtualHost *:80>
ServerAdmin yangjx009@139.com
DocumentRoot "/websites/www"
ServerName localhost
RewriteEngine On
RewriteRule ^index\.html$ index.php [L]
</VirtualHost>
httpd.conf配置url重定向
4)我们这里主要介绍另外一种方式:在网站目录中使用.htaccess,这种方法适合采用虚拟主机形式的网站管理员,
这两种办法设置的重定向规则其实基本上都是一样的,只是设置的地方不同。
三、基本正则表达式
因为URL重定向语法中大量使用了正则表达式,并且正则是每隔一段时间不用都必然会淡忘的东西,所以我们有必要先回顾一下基本的正则写法:
. 换行符以外的所有字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
() $1 $2 一个括号代表一个分组,第一个括号里匹配的内容就用$1引用,第二个括号匹配的内容用$2引用,以此类推......
四、.htaccess都可以做什么?
.htaccess文件可以的事情,主要包括:文件夹密码保护、用户自定义重定向、自定义404页面、扩展名伪静态化、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,等等。。
五、.htaccess语法规则
我们先看一个图片防盗链的例子:
RewriteEngine On
2 RewiteBase /
3 RewriteCond %{HTTP_REFERER} !^http://(.+.)?baidu.com/ [NC] //如果来源网址不是*.baidu.com
RewriteCond %{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 参见下表
*/
服务器变量NAME_OF_VARIABLE具体数值见下表:
HTTP_USER_AGENT //主要用于检测访问者系统和浏览器等
HTTP_REFERER //从哪个页面链接过来
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST //域名
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
API_VERSION //这是正在使用的httpd中(服务器和模块之间内部接口)的Apache模块API的版本, 其定义位于include/ap_mmn.h中。此模块版本对应于正在使用的Apache的版本 (比如,在Apache 1.3.14的发行版中,这个值是19990320:10)。 通常,对它感兴趣的是模块的作者。
THE_REQUEST //这是由浏览器发送给服务器的完整的HTTP请求行。(比如, “GET /index.html HTTP/1.1″). 它不包含任何浏览器发送的附加头信息。
REQUEST_URI //这是在HTTP请求行中所请求的资源。
REQUEST_FILENAME //这是与请求相匹配的完整的本地文件系统的文件路径名或描述.
IS_SUBREQ //如果正在处理的请求是一个子请求,它包含字符串”true”,否则就是”false”。 模块为了解析URI中的附加文件,有可能会产生子请求。
flags
| RewriteRule标记 | 含 义 | 描 述 |
| R | Redirect | 发出一个HTTP重定向 |
| F | Forbidden | 禁止对URL地址的存取 |
| G | Gone | 标记URL地址不存在 |
| P | Proxy | 将URL地址传递给mod_proxy |
| L | Last | 停止处理接下来的规则 |
| N | Next | 再次重第一个规则开始处理,但是使用当前重写后的URL地址 |
| C | Chain | 将当前的规则和紧随其后的规则链接起来 |
| T | Type | 强制执行指明的MIME类 |
| NS | Nosubreq | 只在没有任何内部子请求执行时运行本脚本 |
| NC | Nocase | URL地址匹配对大小写不敏感 |
| QSA | Qsappend | 在新的URL地址后附加查询字符串部分,而不是替代 |
| PT | Passthrough | 将重写后的URL地址传递给另一个Apache模块进行进一步处理 |
| S | Skip | 忽略之后的规则 |
| E | Env | 设置环境变量 |
rewritecond的其他用法:
“-d”(目录)
将TestString视为一个路径名并测试它是否为一个存在的目录。
“-f”(常规文件)
将TestString视为一个路径名并测试它是否为一个存在的常规文件。
“-s”(非空的常规文件)
将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
“-l”(符号连接)
将TestString视为一个路径名并测试它是否为一个存在的符号连接。
“-x”(可执行)
将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
“-F”(对子请求存在的文件)
检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
“-U”(对子请求存在的URL)
检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
第四行:
RewriteRule Pattern Substitution [Flags]
/*
其中的Pattern就是参数,一般为一些文件的扩展名;
Substitution是用来替换前面用的;
这儿的Flags,参考上面的表格,常用的R表示 redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。
*/
五、更多使用举例:
1、图片重定向
RewriteEngine On
RewriteCond %{HTTP_HOST} ^localhost$ //如果域名是localhost
RewriteCond %{REQUEST_FILENAME} !-f //并且访问的文件找不到
RewriteRule ^images/(.+) http://127.0.0.1/test/showimages/$1 [R=302,L] //则跳转到另一个域名下的另一个目录访问这个图片
2、二级域名重定向到www.yourdomain.com
rewriteEngine 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地址到FeedSky
RewriteEngine 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
扩展阅读:
http://blog.neazor.com/?p=559
http://www.cnblogs.com/ganiks/p/htaccess-get-started.html
使用.htaccess实现apache URL重定向的更多相关文章
- PHP网站实现地址URL重定向
网站建设中,通常会用到网站地址URL的重定向,这样的好处是有利于你网站的SEO优化,也就是让你的网站实现伪静态,下面简单介绍一下实现的两种方法: 1.在Apache配置文件中设置重定向 首先找到Apa ...
- Apache服务器的URL重定向
前端时间要整个Apache重定向功能,在此记录一下. 一.安装Apache Windows版本官方下载安装文件httpd-2.2.21-win32-x86-openssl-0.9.8r,选择安装目录, ...
- HttpClient_用Apache HttpClient实现URL重定向
很多网站都使用了URL重定向技术,把一个原始请求从一个位置路由到另一个位置.原因可能是多方面的,比如域名转发.URL缩写.隐私保护.在同一网站维持相似的域名等.本文讲述怎样使用Apache HTTPC ...
- 《用Apache HttpClient实现URL重定向》
作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 很多网站都使用了URL重定向技术,把一个原始请求从一个位置路由到另一个位置.原因可能是多方面的,比如域名转 ...
- Apache配置URL重定向
Apache配置URL重定向 修改/etc/httpd/conf/httpd.conf文件的内容 <Directory "/var/www"> AllowOverrid ...
- apache url路由配置重写
最近复习了一下Apache Rewrite url重定向功能,有个项目用到了.htaccess,简单的几行代码,是看不怎么明白,于是复习了一下. 1.Apache Rewrite的主要功能 就是实现U ...
- 使用.Htaccess文件实现301重定向常用的七种方法
使用.Htaccess文件实现301重定向常用的七种方法 301重定向对广大站长来说并不陌生,从网站建设到目录优化,避免不了对网站目录进行更改,在这种情况下用户的收藏夹里面和搜索引擎里面可能保存的 ...
- 浅谈URL重定向
转载:https://blog.csdn.net/kiyoometal/article/details/90698761 重定向原理 HTTP 协议的重定向响应的状态码为 3xx .浏览器在接收到重定 ...
- apache url rewrite 的RewriteRule参数详解
apache url rewrite 的RewriteRule参数详解 我们经常会在apache那边对一些url进行一些重写操作,那么就会涉及到很多的重写策略的选择,比如重定向的方式,参数的处理,规则 ...
随机推荐
- 【python】for循环一列
a="哈哈哈哈,笑死我了"for i in a: print (i, end=' ') 结果 哈 哈 哈 哈 , 笑 死 我 了
- c#自动更新+安装程序的制作 (转)
c#自动更新+安装程序的制作 (转) http://blog.csdn.net/myhuli120/article/details/6927588 一.自动更新的实现 让客户端实现自动更新,通常做法 ...
- WPF中的字体改善
WPF4对字体渲染做了很大的改善,增加了TextOptions属性,该属性可以设置TextFormattingMode,TextRenderingMode,TextHintingMode 1.Text ...
- hdu 1009 贪心算法
博主英语不好,看懂个大概,老鼠有M磅猫食.有N个房间,每个房间前有一只猫,房间里有老鼠最喜欢的食品JavaBean,J[i].若要引开猫,必须付出相应的猫食F[i]. 当然这只老鼠没必要每次都付出所有 ...
- python,django,mysql版本号查询
1. ubuntu 下如何查询子集的mysql版本: 方法一: 登录子集的mysql之后就会显示mysql版本: ***:~$ mysql -u root -p Enter password: Wel ...
- OSAL多任务资源分配机制
转自OSAL多任务资源分配机制 一.概述 OSAL (Operating System Abstraction Layer),翻译为"操作系统抽象层". 个应用程序对象. ...
- windows远程桌面连接配置
我的电脑 -> 属性 -> 远程 把两个checkbox勾上 运行(win + r) -> 输入secpol.msc回车 -> 找到本地策略 -> 安全选项 ->账 ...
- [转贴]PHP 开发者应了解的 24 个库
作为一个PHP开发者,现在是一个令人激动的时刻.每天有许许多多有用的库分发出来,在Github上很容易发现和使用这些库.下面是我曾经遇到过最酷的24个库.你最喜欢的库没有在这个列表里面?那就在评论中分 ...
- 【HDOJ】1198 Farm Irrigation
其实就是并查集,写麻烦了,同样的代码第一次提交wa了,第二次就过了. #include <stdio.h> #include <string.h> #define MAXNUM ...
- Linux 日常使用指令大全
001.日常维护常用查询命令 #top 显示系统进程 #clear 清理屏幕信息 #cat /etc/redhat-release 查看系统版本信息 #cat /proc/version ...