一. 简单实例介绍
一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置:

1)在httpd.conf文件里使下面模块生效
[root@back ~]# cat /usr/local/apache/conf/httpd.conf
.....
LoadModule ssl_module modules/mod_ssl.so #如果使用https证书,这个模块功能一定要打开!
.....
LoadModule rewrite_module modules/mod_rewrite.so #如果要http强转到https,这个模块功能一定要打开! 2)httpd.conf配置文件或者是在httpd-vhost.conf文件里修改
[root@back ~]# cat /usr/local/apache/conf/httpd.conf
.......
DocumentRoot "/data/vhosts"
<Directory "/data/vhosts">
Options FollowSymLinks MultiViews Includes
AllowOverride All
Require all granted
</Directory> 3)在你的网站根目录下面添加该文件".htaccess"目录访问控制文件,并添加如下内容:
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 含义是这样的:为了让用户访问传统的http://转到https://上来,用了一下rewrite规则:
第一句:启动rewrite引擎
第三句:rewrite的条件是访问的服务器端口不是443端口
第四句:这是正则表达式,^是开头,$是结束,/?表示有没有/都可以(0或1个),(.*)是任何数量的任意字符
整句的意思是讲:启动rewrite模块,将所有访问非443端口的域名请求,url地址内容不变,将http://变成https://。

下面这个是我自己的实际代码:
RewriteEngine on ##开启重定向
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$ ###非443的端口的流量,经我测试即使没有这句代码,下面那句也是直接重定向将所有的域名(因为我是两个域名指向这个网站目录)跳转到下面的https网站,刚好两个域名同一个网站内容而我又知买了一个网站https。
RewriteRule ^(.*) https://www.youadmin.com/ [L]

上面的配置实现了将所有域名的http跳转为https,如果只是针对某一个具体的url的https跳转,则配置情况会有所不同,如下:

只要求访问http://bo.kevin.com/beijing/ 时强制跳转到https://bo.kevin.com/beijing/,其他的url访问时都不做http到https的强转!
在.htaccess文件中添加下面内容: [root@docker-test2 web]# cat .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^bo.kevin.com/beijing/ [NC]
RewriteRule ^(.*)$ https://bo.kevin.com/beijing/ [R,L]
</IfModule> 上面的配置,就实现了只是针对http://bo.kevin.com/beijing/这一个单独的url做https的强制跳转,其他url访问时都不做跳转!

当然,除了上面的方法,还有其他的配置可以实现,比如通过匹配目录规则实现跳转需求,下面都会介绍到.

二. Apache中 RewriteRule跳转规则参数

Apache模块mod_rewrite提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。

mod_rewrite模块可以操作URL的所有部分(包括路径信息部分),在服务器级的(httpd.conf)和目录级的(.htaccess)配置都有效,还可以生成最终请求字符串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向,甚至还可以是内部代理处理。

以下重点介绍下RewriteRule 的规则以及参数说明。RewriteRule指令是重写引擎的根本。此指令可以多次使用。每个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要——在运行时,规则是按这个顺序逐一生效的。

配置格式:
RewriteRule Pattern Substitution [flags]

1) Pattern是一个作用于当前URL的perl兼容的正则表达式。
"当前URL"是指该规则生效时刻的URL的值。它可能与被请求的URL截然不同,因为其他规则可能在此之前已经发生匹配并对它做了改动。

2) Substitution是当原始URL与Pattern相匹配时,用来替代(或替换)的字符串。除了纯文本,还可以包含:
-  对Pattern的反向引用($N) 
-  对最后匹配的RewriteCond的反向引用(%N) 
-  规则条件测试字符串(%{VARNAME})中的服务器变量 
-  映射函数调用(${mapname:key|default})

3) [flags]标记作为RewriteRule指令的第三个参数,是一个包含以逗号分隔的下列标记的列表:

3.1) ‘chain|C‘(链接下一规则)
此标记使当前规则与下一个规则相链接。它产生这样的效果:
如果一个规则被匹配,则继续处理其后继规则,也就是这个标记不起作用;
如果该规则不被匹配,则其后继规则将被跳过。

比如:
在一个目录级规则中执行一个外部重定向时,你可能需要删除".www"(此处不应该出现".www")。
‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]‘(设置cookie):在客户端设置一个cookie。cookie的名称是NAME,值是VAL。
domain是该cookie的域,比如‘.apache.org‘,可选的lifetime是cookie的有效期(分钟),可选的path是cookie的路径。

3.2) ‘env|E=VAR:VAL‘(设置环境变量)
此标记将环境变量VAR的值设为VAL,VAL可以包含可扩展的正则表达式反向引用($N和%N)。此标记可以多次使用以设置多个变量。
这些变量可以在其后许多情况下被间接引用,通常是在XSSI(<!--#echo var="VAR"-->)或CGI($ENV{‘VAR‘})中,也可以在后继的
RewriteCond指令的CondPattern参数中通过%{ENV:VAR}引用。使用它可以记住从URL中剥离的信息。

3.3) ‘forbidden|F‘(强制禁止URL)
强制禁止当前URL,也就是立即反馈一个HTTP响应码403(被禁止的)。使用这个标记,可以链接若干个RewriteConds来有条件地阻塞某些URL。

3.4) ‘gone|G‘(强制废弃URL)
强制当前URL为已废弃,也就是立即反馈一个HTTP响应码410(已废弃的)。使用这个标记,可以标明页面已经被废弃而不存在了。

3.5) ‘handler|H=Content-handler‘(强制指定内容处理器)
强自制定目标文件的内容处理器为Content-handler。例如,用来模拟mod_alias模块的ScriptAlias指令,以强制映射文件夹内的所有文件都
由"cgi-script"处理器处理。

3.6) ‘last|L‘(结尾规则)
立即停止重写操作,并不再应用其他重写规则。它对应于Perl中的last命令或C语言中的break命令。
这个标记用于阻止当前已被重写的URL被后继规则再次重写。例如,使用它可以重写根路径的URL(‘/‘)为实际存在的URL(比如:‘/e/www/‘)。

3.7) ‘next|N‘(从头再来)
重新执行重写操作(从第一个规则重新开始)。此时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理过的URL。
它对应于Perl中的next命令或C语言中的continue命令。此标记可以重新开始重写操作(立即回到循环的开头)。但是要小心,不要制造死循环!

3.8) ‘nocase|NC‘(忽略大小写)
它使Pattern忽略大小写,也就是在Pattern与当前URL匹配时,‘A-Z‘和‘a-z‘没有区别。

3.9) ‘noescape|NE‘(在输出中不对URI进行转义)
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(‘%‘, ‘$‘, ‘;‘等)会被转义为等值的十六进制编码(‘%25‘, ‘%24‘, ‘%3B‘等)。
此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,比如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] ,可以使‘/foo/zed转向到一个安全的请求‘/bar?arg=P1=zed‘。

3.10) ‘nosubreq|NS‘(不对内部子请求进行处理)
在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。比如,在mod_include试图搜索目录默认文件(index.xxx)时,Apache会在内部产生子请求。对于子请求,重写规则不一定有用,而且如果整个规则集都起作用,它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。
使用原则:如果你为URL添加了CGI脚本前缀,以强制它们由CGI脚本处理,但对子请求处理的出错率(或者资源开销)很高,在这种情况下,可以使用这个标记。

3.11) ‘proxy|P‘(强制为代理)
此标记使替换成分被内部地强制作为代理请求发送,并立即中断重写处理,然后把处理移交给mod_proxy模块。
你必须确保此替换串是一个能够被mod_proxy处理的有效URI(比如以http://hostname开头),否则将得到一个代理模块返回的错误。
使用这个标记,可以把某些远程成分映射到本地服务器域名空间,从而增强了ProxyPass指令的功能。 
注意:要使用这个功能,必须已经启用了mod_proxy模块。

Apache环境下强制http跳转至https的配置总结的更多相关文章

  1. apache环境.htaccess设置301跳转及常用.htaccess技巧整理

    apache环境.htaccess设置301跳转及常用.htaccess技巧整理 无论是Nginx,还是Apache都各自有优势,对于我们普通用户而言基本上也没有多大的区别.在虚拟主机环境中,基本上都 ...

  2. windows Apache 环境下配置支持HTTPS的SSL证书

    windows Apache 环境下配置支持HTTPS的SSL证书 1.准备工作 1)在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有SSL版本的A ...

  3. Apache环境下搭建KodExplorer网盘

    Apache环境下搭建KodExplorer网盘 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    yum安装httpd和php    kodexplorer4.25 1 ...

  4. apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

    apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法   首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...

  5. apache如何设置http自动跳转到https

    如何设置http自动跳转到https?apache环境下,配置好https后,需要设置url重定向规则,使网站页面的http访问都自动转到https访问. 1.先打开url重定向支持1)打开Apach ...

  6. ubuntu环境下eclipse的安装以及hadoop插件的配置

    ubuntu环境下eclipse的安装以及hadoop插件的配置 一.eclipse的安装 在ubuntu桌面模式下,点击任务栏中的ubuntu软件中心,在搜索栏搜索eclipse 注意:安装过程需要 ...

  7. Apache环境.htaccess伪静态301跳转(www与不带www)

    一般而言,我们使用的301跳转就是WWW与不带WWW域名之间的跳转,用行话说就是权重要归一.对于我们使用Apache环境的来说其实相对nginx比较简单,因为只需要我们在网站根目录有.htaccess ...

  8. apache环境下ssl证书链不完整问题解决,原因是缺少中间证书

    事情的起因是,对一个网站的升级,从http升级到https,苹果手机可以正常访问,唯独安卓手机出现空白,安卓访问https的时候是出现的空白. 服务器的系统是windows Server 2008 R ...

  9. cpanle/Apache 强制http跳转到https

    因为租的虚拟主机是使用Cpanel,按照网上找的文章,处理的步骤如下: 打开Cpanel面板-文件管理器-设置(在页面的右上角)-勾选显示隐藏文件(dotfiles)-save . 找到网站所在的目录 ...

随机推荐

  1. DotNet .Net Framework与Net Core与Net Standard 以及.NET5

    Net Framework 是什么 1.Net Framework 是Net的一种实现,在此类库上我们可以使用C#,VB,F#进行程序编写,主要用于构建Windows 下的应用程序 2.有两部分组成部 ...

  2. python序列(六)列表排序

    1.sort方法排序原址排序 list.sort(key=None,reverse=False(or True)) 当reverse=False时:为正向排序: 当reverse=True时:为反向排 ...

  3. java 反射给字段重新赋值

    1.获取实体的所有字段,遍历 2.获取字段类型 3.调用字段的get方法,判断字段值是否为空 4.如果字段值为空,调用字段的set方法,为字段赋值 Field[] field = model.getC ...

  4. 听说又有兄弟因为用YYYY-MM-dd被锤了...

    还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了... 事故现场 我们来写个单元测试,重现一下这个问题. 测试逻辑: 创建两个日期格式化,一个是出问题的YY ...

  5. MongoDB插入数据,除去Class key

    本文来源于: 来源:CSDN 原文:https://blog.csdn.net/ClementAD/article/details/50849680 去除class字段的本质为设置 DefaultMo ...

  6. HystrixRequestContext实现Request级别的上下文

    一.简介 在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId.orgId等),那么如何实现呢? 方案一: 拦截器加上Threa ...

  7. Java利用VLC开发简易视屏播放器

    1.环境配置 (1)下载VLC  VlC官网http://www.videolan.org/    各个版本的下载地址http://download.videolan.org/pub/videolan ...

  8. linux下hue的安装与部署

    一.Hue 简介 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是基于Python Web框架Djang ...

  9. Java中常用修饰符浅谈

    一.public.protected.default和private修饰符的作用域 public:在java程序中,如果将属性和方法定义为 public 类型,那么此属性和方法所在的类和及其子类,同一 ...

  10. 辅助调用函数【call,apply,bind】

    函数也是对象,每个函数都有自己的方法. e.g. var jane = { name:'Jane', sayHelloTo:function(name) { 'use strict'; console ...