archpr说文件不是rar文件_【表哥有话说 第52期】.htaccess文件使用

本文介绍.htaccess文件的基本概念、工作原理、语法结构及其在Apache服务器中的应用,包括重定向、防盗链、IP限制等常见功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是 .htaccess 文件?

全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录,概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。

工作机制

Apache在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用。所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:

/.htaccess

/www/.htaccess

/www/htdocs/.htaccess

/www/htdocs/example/.htaccess

总共要访问4个额外的文件,即使这些文件都不存在。

用途

通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档、防盗链等功能。

优缺点

  • 优点:利用当前目录的.htaccess文件可以允许管理员灵活的随时按需改变目录访问策略。

  • 缺点:Apache必须在所有上级的目录中查找.htaccess文件,对每一个请求都需要读取一次.htaccess文件,降低服务器性能,其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改。

基本语法

这里整理了一下 .htaccess中经常出现的指令即字符含义

常用指令

指令功能示例
AddType添加类型AddType application/x-httpd-php .php
RewriteEngine用于开启或停用rewrite功能。RewriteEngine On|Off
RewriteBase用于设定重写的基准URLRewriteBase /
RewriteCond定义了一个规则的条件RewriteCond %{HTTP_HOST} ^(www.)?xxx.com$ // %{服务器变量名称} 常用变量可参考表三
RewriteRule重写规则RewriteRule /sss /ttt 将用户的/sss目录请求转到/ttt目录
ErrorDocument设置错误页面ErrorDocument 400 /error_pages/400.html
DirectoryIndex设置文件夹首页DirectoryIndex test.php
Redirect设置重定向Redirect /old/  /new/

RewriteCond语法中字符含义

字符含义
-d视为一个路径名并测试它是否为一个存在的目录
-f视为一个路径名并测试它是否为一个存在的常规文件
-s视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件
-l视为一个路径名并测试它是否为一个存在的符号连接
-x视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测
-F是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问
-U是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问

RewriteRule语法中部分字符含义

一般使用方法为 RewriteRule + 规则 + [字符]

字符含义
E设置环境变量
L结尾规则
N从头再来
NC匹配忽略大小写
NE在输出中不对URI进行转义
R强制重定向
F强制禁止URL

常用的服务器和执行环境信息

参数名称样例参考值说明
HTTP_USER_AGENT-当前请求头中 User-Agent: 项的内容,如果存在的话。
HTTP_REFERERhttp://www.test.cn/test.php引导用户代理到当前页的前一页的地址
HTTP_FORWARDED如果使用代理服务器的话会是代理服务器的IP地址, 本地不容易搭环境测试出值来.相当于PHP中的服务器参数: $_SERVER["HTTP_FORWARDED"]
HTTP_HOSTwww.test.com相当于PHP中的服务器参数: $_SERVER["HTTP_HOST"]
REQUEST_URI/test.html浏览器请求的资源信息.
REQUEST_FILENAMEC:/webRoot/t/test.html被请求的资源的在磁盘的物理地址.
SERVER_ADDR127.0.0.1当前运行脚本所在的服务器的 IP 地址。
SERVER_PORT80Web 服务器使用的端口。
REMOTE_ADDR127.0.0.1 正在浏览当前页面用户的 IP 地址。浏览当前页面的用户的 IP 地址。
REMOTE_HOST127.0.0.1 正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR相当于PHP中的服务器参数: $_SERVER["REMOTE_HOST"]
REMOTE_PORT2356用户连接到服务器时所使用的端口
REQUEST_METHODGET请求方式
SCRIPT_FILENAME/var/www/html/index.php相当前执行脚本的绝对路径。
QUERY_STRINGa=b&c=d&e=fquery string(查询字符串),如果有的话,通过它进行页面访问。

更多值可以参考PHP手册的 PHP Manual›预定义变量›服务器和执行环境信息 即$_SERVER 部分

.htaccess 常见用法

实现网站的重定向

RewriteEngine On  #重写引擎开启RewriteBase /   #设置重写基准目录为网站根目录 默认为http://www.xxx.com/这种形式RewriteCond %{REQUEST_FILENAME} !-f #被请求的资源地址不是文件RewriteCond %{REQUEST_FILENAME} !-d #被请求的资源地址不是目录RewriteRule .  /index.php [L]  #满足上述两个条件,就将满足的请求跳转到index.php  ,[L] 为last最后一条#-f -d含义参考表二

文件防盗链

RewriteEngine onRewriteCond %{HTTP_REFERER} !^$ # 判断HTTP_REFERER不空RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] # 判断来源是否来自自己的域RewriteRule \.(gif|jpg|png)$ http://****//error.png [R,L]# 如果上面两个条件,将满足链接尾部为gif、jpg、png的定向到 http://****//error.png ,此处的R为redirect 意义为强制重定向 [NC]为忽略大小写

限定IP地址访问

order allow,denydeny from 33.33.33.33 # 禁止指定IP 访问deny from 12.12.12. # 禁止12.12.12.0/24 的地址访问allow from all # 除禁止部分都可访问,不加都不能访问

文件保护

order allow,denydeny from all

其他用法

ErrorDocument 404 /templates/404.html #将错误页面定向到404.htmlAddType application/x-httpd-php .test #将后缀为test的文件当做php脚本运行DirectoryIndex test.php # 设置首页为test.phpOptions All -Indexes  # 禁止目录浏览Options All +Indexes  # 开放目录浏览

https://htaccess.iapolo.com/ 在线生成各种功能的htaccess文件

.htaccess 在CTF中的作用

最开始接触.htaccess文件就是在CTF中接触到的,而后用到的次数也逐渐增多。

最常用的就是文件上传.htaccess,绕过后缀限制(在.htaccess有执行权限时)使用方法:

1、.htaccess文件内容为

 AddType application/x-httpd-php .jpg

然后再上传后缀为jpg的一句话即可。

2、 或者可以使用如下语句

php_value auto_prepend_file  ".htaccess"# <?php phpinfo(); ?>

本地测试发现,会爆500错误

a8a24a45def7127bd8a4ade446df4f83.png

phpstudy_pro中php版本 测试无一成功,用phpstudy2018版本中,仅非nts版本测试成功,

d9f0f3b0ac23e07bad56f04031787369.pngf235a00e1fa9a4c80c23b8c56bdab313.png

成功结果如下

9e96564bd189749d46db164e3c525228.png

也就是说利用php_value时,存在失败的可能,原因通过日志来看

Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration

nts含义就不在这里说了。可能是PHP处理程序不同的原因,原因可以参考一下

https://forums.cpanel.net/threads/invalid-command-php_value-perhaps-mis-spelled-or-defined-by-a-module-not-included.184931/  

PHP处理程序:http://www.voidcn.com/article/p-qfxtodcn-btz.html

3、如果检测后缀的正则表达式,且php同上为非nts,则可以上传.htaccess,内容如下

php_value pcre.backtrack_limit 0php_value pcre.jit 0

演示代码

<?php $filename = "1.php";if (preg_match("/\.php/",$filename)) {echo "true";}else{echo "false";}?>

在不存在.htaccess时运行

10ad2f402a79abfc0e6e458669689050.png

存在时,且内容与上相符时

6e97a2ec6609be8dd0837eb5ce228666.png

pcre.backtrack_limit 与 pcre.jit的解释在PHP手册的PHP Manual›php.ini 配置›php.ini 配置选项列表

ab998c391751dbf61f2baf2189f766bf.png

目的是让正则的回溯设置为0,从而让匹配失效

也就是说第一步先上传.htaccess,然后再上传php文件。

4、更多用法可以参考php手册的php.ini 配置选项列表

266ac083be168f2b65cb912cf6a4af12.png

在这里说一下 这里的可修改范围

51ae055b7da4bc4e82ad721f15e5cc29.png

一般寻找可利用点就从 PHP_INI_ALL、PHP_INI_PERDIR中查找

参考资料

.htaccess 文件使用手册

https://c7sky.com/htaccess-guide.html

.htaccess详解及.htaccess参数说明

https://blog.csdn.net/cmzhuang/article/details/53537591

最完的htaccess文件用法收集整理

https://www.jb51.net/article/30445.htm

.htaccess rewrite 规则详细说明

https://www.jb51.net/article/82158.htm

.htaccess文件说明大全

https://htaccess.iapolo.com/htaccess-daquan.php

Apache中.htaccess文件功能

https://www.jb51.net/article/27304.htm

htaccess百度百科

https://baike.baidu.com/item/htaccess/1645473?fr=aladdin#2

php.ini配置选项可修改范围

http://blog.itpub.net/29753604/viewspace-134041

- END -

4466be12b9eb9e05e3cca19e8beffe4a.pngSKSEC扫码关注,学习更多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值