Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python正则表达式(上)

Python正则表达式(上)

作者头像
小雨coding
发布于 2020-07-22 08:10:47
发布于 2020-07-22 08:10:47
1.6K05
代码可运行
举报
文章被收录于专栏:小雨编程小雨编程
运行总次数:5
代码可运行

本节知识大纲:

一、正则表达式介绍

正则表达式是什么?正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

如果我们对字符串有要求,我们就可以通过正则表达式把它表示出来,我们可以用正则表达式去匹配符合规则的字符串;

正则表达式的处理对象是字符串,主要应用正则表达式的操作有:

  • 验证
  • 查找
  • 替换
1. 正则表达式的匹配流程:

图片.png

2. 正则表达式的应用流程

match()是用于校验的函数

案例01:输入一个三位数,通过正则表达式输入的是否满足要求?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
input_number = input("请输入一个三位数:")
match = re.match("^\d{3}$",input_number)
if match is None:
    print("不符合要求")
else:
    print("符合要求")

案例02

判断输入的手机号码是否有效,要求:号码位数是11位;第一位是数字1;第二位是数字345789;后面是0-9均可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 步骤一:通过引擎编译出对象
import re
pattern = re.compile(R"[1][345789]\d{9}")   # 编译出pattern对象
input_mobile = input("请输入手机号码:")
# 步骤二:对输入的内容进行匹配
# print(pattern.match(input_mobile))
if pattern.match(input_mobile):
    print("输入的手机号有效!")
else:
    print("输入的手机号无效!")
3.正则表达式的基本语法

图片.png

二、预定义字符

如果每次都通过代码来验证正则表达式是否正确效率有点低,我们可以通过在线工具来校验我们的正则表达式是否正确,比如oschina的在线正则表达式测试工具;当然在Windows系统下可以使用RegexBuddy工具进行检测。

普通字符:字母、数字、下划线以及没有特殊意义的符号,都是普通字符。

元字符:这里主要有11个构成正则表达式元字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.   \   |   ^   $   *   +   ?   []   {}   ()
1. 通配字符

.是一个能匹配除\n以外任何字符的通用匹配符,例如,我们想匹配以a开头的,后面跟3个任意字符的正则表达式可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
re.match("^a...","avfs")

另外三个连续的通配符可以写成{3}像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
re.match("^a.{3}","avfs")

这里也可以使用findall()方法,能返回待匹配字符串中所有与正则表达式相匹配的字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall("a.{3}","avfssssadddadddaef"))  # 把匹配开头的^去掉了

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['avfs', 'addd', 'addd']
2. 反斜杠

反斜杠加字母有时候在转义字符和正则表达式中功能冲突,通常的解决办法是使用r或者R取消转义。

三、字符集

1. 系统正则表达式字符集

案例:

非数字开头 + 两个空格 + 数字/字母/下划线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print(re.match(R"^\D\s{2}\w$","a  _"))
2. 用户自定义正则表达式字符集

除了使用系统字符集以外,用户可以自定义字符集

注意:这里一个中括号只能匹配一个字符;^在中括号外表示一行开始,在中括号里面表示取反、排除的意思

案例:

使用自定义字符集,匹配不区分大小写以a-f开头,接接着是三个小写字母,再后面是以偶数结尾

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print(re.findall(R"[a-fA-F][a-z]{3}[02468]","bddf42fbas8"))

注意:除了^-以外,如果把其它任何特殊符号放到[]里,那么就自动去掉特殊意义,只表示符号本身的含义,如.[]里只表示.点号的意思,没有了通配符的功能。

四、正则表达式中量词

1. 三种量词符号

案例:通过正则表达式匹配英文单词,要求以na开头,以e来结尾

方法一:使用*

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall(R"na[a-z]*e","my name is Alice,nae,nattore"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['name', 'nae', 'nattore']

使用*号匹配name(重复1次),匹配nae(重复0次),匹配nattore(重复多次)

方法二:使用+

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall(R"na[a-z]+e","my name is Alice,nae,nattore"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['name', 'nattore']

使用+号,只能匹配name(重复1次),匹配nattore(重复多次)

方法三:使用?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall(R"na[a-z]?e","my name is Alice,nae,nattore"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['name', 'nae']

使用?号,只能name(重复1次)和nae(重复0次)

案例:

判断身份证号是否有效, 特征一:长度18或者15位 特征二:前17位是数字 特征三:最后一位是数字或者x

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.match(r"(\d{14}[0-9x]|\d{17}[0-9x])","34262320001218646x"))
2. 花括号表示重复次数

(1){n}表示重复n次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 正则表达式匹配以na开头加上4个小写字母并以e结尾:
print(re.findall(R"na[a-z]{4}e","my name is Alice,nae,nattore"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['nattore']

(2){n,m}表示重复n到m次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 正则表达式匹配以na开头加上3-10个小写字母并以e结尾:
print(re.findall(R"na[a-z]{3,10}e","my name is Alice,naicajoe,nattorirce"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['naicajoe', 'nattorirce']

(3){n,}表示重复n次到无限次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 正则表达式匹配以na开头加上3个以上的小写字母并以e为结尾:
print(re.findall(R"na[a-z]{3,}e","my name is Alice,naicajoe,nattorighjrce"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['naicajoe', 'nattorighjrce']
3. 贪婪模式和非贪婪模式

(1)贪婪模式 贪婪模式是指在Python在默认情况下量词会尽可能多的匹配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall("\d+","12345678888888abc"))    # 尽量多的匹配
print(re.findall("\d*","12345678888888abc"))
print(re.findall("\d{3,}","12345678888888abc"))
print(re.findall("\d{3,8}","1234567888888888abc"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['12345678888888']
['12345678888888', '', '', '', '']
['12345678888888']
['12345678', '88888888']

(2)非贪婪模式 在表达式的结尾加上问号?,会切换成非贪婪模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall("\d+?","12345678888888abc"))
print(re.findall("\d{3,}?","12345678888888abc"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['1', '2', '3', '4', '5', '6', '7', '8', '8', '8', '8', '8', '8', '8']
['123', '456', '788', '888']

五、字符边界

Python正则表达式字符边界主要有四种:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
^      开始位置
$      结束
\b     单词边界
\B     非单词边界
1. 字符串的开始和结束

案例:

输入一个6位数字,必须要以95开头,以8结尾的数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall(r"^95\d{3}8$","958348"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['958348']
2. 字符串的边界

\b表示单词的边界,指某一个位置前后不都是字母、数字、下划线(\w) 案例:输入一句英文,找出里面以a、b、c开头的单词

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
str01 = "Use this toggle to the left to manage how your " \
        "browser uses BBC’s performance cookies. If you’re " \
        "outside the UK you can also use the toggle to set " \
        "your preferences for personalised advertising cookies."
pattern = re.compile(r"\b[abcABC][a-z]*\b")
print(pattern.findall(str01))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['browser', 'cookies', 'can', 'also', 'advertising', 'cookies']

六、逻辑判断

正则表达式中表示逻辑或的是用符号|,分为整体或和部分或

(1)整体或 案例:简单匹配身份证号,现在的身份证号是18位以前是15位,我们希望两者都兼容;前面全是数字,最后一位可以是数字或者x

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print(re.findall("\d{14}[0-9x]|\d{17}[0-9x]]","34262219971012x"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['34262219971012x']

(2)部分或 案例:在一段英文句子中,找出es、er或者ing结尾的单词

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
str01 = "Use this toggle to the left to manage how your " \
        "browser uses BBC’s performance cookies. If you’re " \
        "outside the UK you can also use the toggle to set " \
        "your preferences for personalised advertising cookies."
pattern = re.compile(r"\b[a-z]*(es|ing|er)\b")
print(pattern.findall(str01))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['er', 'es', 'es', 'es', 'ing', 'es']

为什么没有显示出完整的单词呢,这就涉及到正则表达式中分组的知识了;

七、 分组

1. 捕获组与非捕获组

分组是我们正则表达式中一个难点,把正则表达式的一部分用括号括起来作为一个组;主要包括捕获组()非捕获组(?:)如何进行捕获呢?待捕获的表达式用小括号括起来,编号从1开始,后面通过反斜杠加数字标号进行调用。我们以一个案例来进行解释

案例: 在前一段英文中,匹配这样的单词,有5个字符;第一个字母和第五个一样,第二个和第四个一样,比如abcba

分析:因为匹配的是单词第一个和最后一个都是单词的边界,故正则表达式的前后都用\b,第一个字母和第二个字母后面都要用到所以分别给它们设置捕获组。用小括号括起来([a-z])([a-z])第三字母后面用不到所以不设置捕获组,第四个字母和第五个字母调用前面的捕获组,所以通过反斜杠加数字编号来进行调用,所以主要的正则表达式为:\b([a-z])([a-z])[a-z]\2\1\b

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print(re.findall(r"\b([a-z])([a-z])[a-z]\2\1\b","fdadd abcba"))

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[('a', 'b')]

貌似是匹配到了,但是输出的结果并不满意,并不是完整的显示内容这是怎么回事呢?

原因:如果对正则表达式做了分组,使用findall函数则显示捕获组所匹配的内容,不能完整显示,如果想完整显示的话有两个解决办法:

方法一:使用非捕获组 如果不需要对捕获组的内容调用,可以使用非捕获组,在表达式前加上?:就可以了,表示只捕获数据了,只用来表达条件。

回到我们前面的案例,英文句子中匹配单词,怎样才能完整显示呢?对于后面不需要调用的正则表达式分组,我们使用非捕获组的方式,就是表达式前加上问号和冒号即可,则前面的正则表达式\b[a-z]*(es|ing|er)\b可以写成\b[a-z]*(?:es|ing|er)\b,这样我们的输出结果就是完整的单词了。

方法二:使用迭代函数finditer 将findall函数改为迭代函数finditer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
match_result = re.finditer(r"\b([a-z])([a-z])[a-z]\2\1\b","fdadd abcba")
match_list = []
for i in match_result:
    match_list.append(i.group(0))
print(match_list)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['abcba']

这样就能完成显示匹配结果了

2. 分组的命名

捕获组默认是从数字1开始编号的,但是如果捕获组数量多的话,最好还是能给捕获组命名方便调用,那么怎么给捕获组命名呢?

命名的方法:加问号加P跟着尖括号里写上名称(?P<名称>)

调用的方法:加问号加P等于号号码跟上名称(?P=name)前面的正则表达式\b([a-z])([a-z])[a-z]\2\1\b命名可以写成\b(?P<number01>[a-z])(?P<number02>[a-z])[a-z](?P=number02)(?P=number01)\b

实际代码可以写成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(re.findall(r"\b(?P<number01>[a-z])(?P<number02>[a-z])[a-z](?P=number02)(?P=number01)\b","fdadd abcba"))

八、零宽断言

Python正则表达式的零宽断言有着不同的称呼:零宽度断言、预搜索、环视等等,它是干嘛的呢?它是用来匹配一个位置 零宽的意思是不占用字符宽度、位置,比如\b表示单词起始或者结束的位置,^表示正则表达式的开始;$表示正则表达式的结束;零宽断言的特征:

(1)做位置的匹配,不占宽度

(2)匹配的内容不计入最终的结果

(3)主要用作判断某个位置的前后字符

1. 语法格式

图片.png

2. 解释

有一段字符串我们根据它前面的表达式来找到匹配的字符串,比如要在www.baidu.com中查找名称baidu,我们可以根据条件声明根域名是以www.开头的,.com结尾的。那么零宽断言的表达式就可以写成(?<=www[.])[a-z]+(?=[.]com)代码示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
print(re.findall(r"(?<=www[.])[a-z]+(?=[.]com)","www.baidu.com"))

输出结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['baidu']

注意:匹配输出的内容是零宽断言括号外面的部分

正则表达式是一个非常强大的工具,熟练地使用正则表达式能加大地提高我们代码的效率,它的的内容很丰富我们一节没有讲完,下一节我们继续讲解正则表达式的知识~

·END·

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小雨编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS 7安装部署Apache网站后配置详解
在一台CentOS 7上搭建Apache网站后,一般都是允许所有人访问的,那么可能会有一些特殊情况,需要对访问网站的人进行限制,出于这种情况,Apache可以通过Require配置项,来对客户端进行一些访问限制,可以基于IP地址、网段、主机名或域名。使用名称“all”时表示任意地址。
星哥玩云
2022/07/26
1.1K0
Web网站服务(apache的权限设置)
1、httpd服务的访问控制 作用: 1)控制对网站资源的访问 2)为特定的网站目录添加访问授权 常用访问控制方式: 1) 客户机地址限制 2) 用户授权限制 2、基于客户端地址的访问控制: 可控制:ip地址、网络地址、域名、主机名 Order配置项,定义控制顺序: 1) 先允许后拒绝(拒绝优先)默认拒绝所有:order allow,deny 2) 先拒绝后允许(允许优先)默认允许所有:order deny,allow Allow,deny配置项,设置允许或拒绝的地址: Allow from addre
L宝宝聊IT
2018/06/20
2K0
浅谈 Apache 的访问控制配置
为了更好地控制对网站资源的访问,所以需要为特定的网站目录添加访问授权。 客户机地址限制: 通过 Require 配置项,可以根据主机的主机名或IP地址来决定是否允许客户端访问,在 httpd服务器的主配置文件的 <Location>、<Directory>、<Files>、<Limit> 配置段中均可以使用 Require 配置项来控制客户端的访问。 常用格式如下: Require all granted :表示允许所有主机访问 Require all denied :表示拒绝所有主机访问 Require local :表示仅允许本地主机访问 Require [not] host <主机名或域名列表> :表示允许或拒绝指定主机或域访问 Require [not] IP <IP地址或网段列表> :表示允许或拒绝制定IP或网段访问 具体用法: 路径:/usr/local/httpd/conf/httpd.conf 1、允许所有
小手冰凉
2019/09/10
2.7K0
浅谈 Apache 的访问控制配置
手把手教你,嘴对嘴传达----Apache的访问控制
HTTP协议是基于TCP协议之上的,在进行HTTP连接之前,要先进行TCP连接,每个TCP连接都要进行三次握手与四次挥手。建立与关闭连接对于HTTP协议而言会消耗很多的内存与CPU资源。 解决办法是HTTP连接保持。就是尽量地保持客户端的连接,通过一个TCP连接传送多个HTTP请求响应,对于客户端可以提高50%以上的响应时间,对于服务器可以降低建立与关闭连接时的资源消耗。
不吃小白菜
2020/09/03
4220
手把手教你,嘴对嘴传达----Apache的访问控制
CentOS 7 中httpd服务的用户限制详解
Apache HTTP Server 之所以受到众多企业的青睐,得益于其代码开源、跨平台、功能模块haul、可灵活定制等诸多优点,其不仅性能稳定,在安全性方面的表现也十分出色。
星哥玩云
2022/07/28
7790
CentOS 7 中httpd服务的用户限制详解
CentOS-Apache的增值服务
1) AuthName:定义提示信息,用户访问时提示信息会出现在认证的对话框中  2) AuthType:定义认证类型,在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5  3) AuthUserFile:定义包含用户名和密码的文本文件,每行一对  4) AuthGroupFile:定义包含用户组和组成员的文本文件。组成员之间用空格分开,如:group1:user1 user2  5) require 命令:定义哪些用户或组才能被授权访问。如:   require user user1 user2 (只有用户user1和user2可以访问)   requires groups group1 (只有group1中的成员可以访问)   require valid-user (在AuthUserFile指定的文件中的所有用户都可以访问)
偏有宸机
2020/11/04
5800
CentOS 7.4安装配置Apache网站服务和构建虚拟主机
为了更好地控制对网站资源的访问。可以为特定的网站目录添加访问授权。主要分为客户机地址限制和用户授权限制,这两种访问控制方式都应用于httpd.conf配置文件中的目录区域范围内。
星哥玩云
2022/07/31
2K0
CentOS 7.4安装配置Apache网站服务和构建虚拟主机
Apache 配置与应用
Apache HTTP Server 之所以受到众多企业的青睐,得益于其源代码开源,跨平台、功能模块化、可灵活定制等优点,其不仅性能稳定,在安全性方面的表现也十分出色。
全栈程序员站长
2022/09/14
4890
Apache 配置与应用
Apache用户认证,域名跳转,Apache访问日志
用户认证是在你打开网页的时候就需要进行认证,如果没有通过认证就不允许访问网页,和网站上的登录账户不一样。这样的做法虽然可以增加安全性,但是会导致用户体验很差,因为总是要你认证完了才能访问网页,也是挺麻烦的。不过这样的需求还是有可能会遇到的,因为有些网页需要比较高的安全保证,例如后台管理员登录的入口网页。
端碗吹水
2020/09/23
10.6K0
Apache用户认证,域名跳转,Apache访问日志
Apache与SVN整合
[root@localhost ~]# yum install httpd mod_dav_svn
星哥玩云
2022/06/13
5650
Apache与SVN整合
linux学习第三十九篇:Apache用户认证,域名跳转,Apache访问日志
Apache用户认证 虚拟主机的配置文件: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 把111.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com <Directory /data/wwwroot/111.com> //指定认证的目录,只要111.com这个目录下面的都要认证
用户1215343
2018/02/05
1.4K0
linux学习第三十九篇:Apache用户认证,域名跳转,Apache访问日志
Centos 7.2搭建HTTP服务,并进行相关配置
关闭防火墙 #systemctl stop firewalld #systemctl disable firewalld
指剑
2022/07/15
9830
Centos 7.2搭建HTTP服务,并进行相关配置
Apache用户认证、域名跳转、访问日志格式 原
注意: 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。
阿dai学长
2019/04/03
1.7K0
Apache Web服务器安全配置全攻略[通俗易懂]
作为最流行的Web服务器,Apache Server提供了较好的安全特性,使其能够应对可能的安全威胁和信息泄漏。 Apache 服务器的安全特性   1、 采用选择性访问控制和强制性访问控制的安全策略   从Apache 或Web的角度来讲,选择性访问控制DAC(Discretionary Access Control)仍是基于用户名和密码的,强制性访问控制MAC(Mandatory Access Control)则是依据发出请求的客户端的IP地址或所在的域号来进行界定的。对于DAC方式,如输入错误,那么用户还有机会更正,从新输入正确的的密码;如果用户通过不了MAC关卡,那么用户将被禁止做进一步的操作,除非服务器作出安全策略调整,否则用户的任何努力都将无济于事。   2、Apache 的安全模块   Apache 的一个优势便是其灵活的模块结构,其设计思想也是围绕模块(Modules)概念而展开的。安全模块是Apache Server中的极其重要的组成部分。这些安全模块负责提供Apache Server的访问控制和认证、授权等一系列至关重要的安全服务。   mod_access模块能够根据访问者的IP地址(或域名,主机名等)来控制对Apache服务器的访问,称之为基于主机的访问控制。   mod_auth模块用来控制用户和组的认证授权(Authentication)。用户名和口令存于纯文本文件中。mod_auth_db和mod_auth_dbm模块则分别将用户信息(如名称、组属和口令等)存于Berkeley-DB及DBM型的小型数据库中,便于管理及提高应用效率。   mod_auth_digest模块则采用MD5数字签名的方式来进行用户的认证,但它相应的需要客户端的支持。   mod_auth_anon模块的功能和mod_auth的功能类似,只是它允许匿名登录,将用户输入的E-mail地址作为口令。   SSL(Secure Socket Lager),被Apache所支持的安全套接字层协议,提供Internet上安全交易服务,如电子商务中的一项安全措施。通过对通讯字节流的加密来防止敏感信息的泄漏。但是,Apache的这种支持是建立在对Apache的API扩展来实现的,相当于一个外部模块,通过与第三方程序的结合提供安全的网上交易支持。 Apache服务器的安全配置   Apache具有灵活的设置,所有Apache的安全特性都要经过周密的设计与规划,进行认真地配置才能够实现。Apache服务器的安全配置包括很多层面,有运行环境、认证与授权设置等。Apache的安装配置和运行示例如下:   1、以Nobody用户运行   一般情况下,Apache是由Root 来安装和运行的。如果Apache Server进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Apache Server进程以最可能低的权限用户来运行。通过修改httpd.conf文件中的下列选项,以Nobody用户运行Apache 达到相对安全的目的。   User nobody   Group# -1   2、ServerRoot目录的权限   为了确保所有的配置是适当的和安全的,需要严格控制Apache 主目录的访问权限,使非超级用户不能修改该目录中的内容。Apache 的主目录对应于Apache Server配置文件httpd.conf的Server Root控制项中,应为:   Server Root /usr/local/apache   3、SSI的配置   在配置文件access.conf 或httpd.conf中的确Options指令处加入Includes NO EXEC选项,用以禁用Apache Server 中的执行功能。避免用户直接执行Apache 服务器中的执行程序,而造成服务器系统的公开化。   Options Includes Noexec   4、阻止用户修改系统设置   在Apache 服务器的配置文件中进行以下的设置,阻止用户建立、修改 .htaccess文件,防止用户超越能定义的系统安全特性。   AllowOveride None   Options None   Allow from all   然后再分别对特定的目录进行适当的配置。   5、改变Apache 服务器的确省访问特性   Apache 的默认设置只能保障一定程度的安全,如果服务器能够通过正常的映射规则找到文件,那么客户端便会获取该文件,如 http://loc
全栈程序员站长
2022/11/17
1.6K0
11.18 Apache用户认证
httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录 AllowOverride AuthConfig //这个相当于打开
运维小白
2018/02/06
7450
Apache配置与应用
4、修改自动生成的awstats访问权限,加载CGI模块(Apache2.4以上版本需要加载CGI模块)
全栈程序员站长
2022/09/06
5400
Apache配置与应用
部署Apache网站服务以及访问控制的实现
创建yum仓库的步骤详细步骤请参考 Linux下通过rdesktop远程登陆Windows系统
星哥玩云
2022/07/25
7200
部署Apache网站服务以及访问控制的实现
CentOS 7下Apache实现HTTP访问SVN资源库
在搭建了我的笔记SVN资源库之后,我又想如果直接在手机查看笔记多好,前提是能支持http访问svn资源库。通过自己尝试成功后,在此分享给大家。
星哥玩云
2022/07/13
5250
Linux基础(day43)
11.18 Apache用户认证 httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录
运维小白
2018/02/06
7670
Linux Apache 给AWStats 创建 访问密码
CentOS7 安装最新版本 AWStats,在httpd.conf 中加入了alias,可以直接访问网址就进入 浏览。十分不安全。
星哥玩云
2022/07/03
1.1K0
相关推荐
CentOS 7安装部署Apache网站后配置详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档