Ubuntu 20.04 LTS 安装apache2&实现解析php | .htaccess文件学习
今天做到了一道文件上传的题目,运用到了.htaccess文件。打算在本地安装apache2服务器,测试一下,遇到了很多问题,比如我才发现我还没有安装php233。修改配置使得.htaccess有效也看了很多教程,最终成功了,这里做记录后供大家参考。
安装apache2服务器
sudo apt update
sudo apt install apache2
安装好后在浏览器中进行访问,输入你的机器的ip就行。
安装php
sudo apt install libapache2-mod-php
这里我们不是直接安装sudo apt install php
。主要的原因应该是libapache2-mod-php
可以自动帮你进行apache与php之间的相关配置。安装libapache2-mod-php
时已经自动安装了php。
安装了它,我们的apache服务器就能解析php文件了。
测试,我们写一个1.php
来测试一下。
<?php phpinfo();?>
成功返回php信息。说明我们的apache服务器已经能顺利解析php了。
修改配置文件使得.htaccess有效
在/etc/apache2/apache2.conf
174行左右之后加入以下内容。吐槽一下网上的很多教程,都已经过时了(
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
具体效果如下
然后我们重启apache服务器,我了解到的有两种方式
service apache2 restart
或者
systemctl restart apache2
.htaccess实例 | 把jpg后缀变成php可执行文件
之后我们试着在/var/www/html
下写一个.htaccess
文件来把.jpg
文件变成php可执行文件。
AddType application/x-httpd-php .jpg
此外我们还可以这样写。
<FilesMatch ".jpg">
SetHandler application/x-httpd-php
</FilesMatch>
FileMatch 后面的字符串是根据正则匹配
写的。所以我们这样写是不是有点问题呢?如果用户上传一个.jpg.txt
也会被当作可执行文件。
所以真要执行严格的后缀名为jpg
的话,我们应该这样写。
<FilesMatch ".jpg$">
SetHandler application/x-httpd-php
</FilesMatch>
然后我们把刚才的1.php重命名为1.jpg。在正则表达式中$
表示字符串的结尾,也就是我们限制了.jpg
出现在字符串的结尾。
战术总结
至此,我们已经成功了联合了apache和php,修改使得.htaccess文件有效,并写了一个小case。从一开始的windows桌面端的wampserver。再到后来 docker的 ctftraining/base_image_nginx_mysql_php_73,我用php的方式慢慢演变,但是用的都算集成环境。今天成功自己配置了一个apache服务器和php。还了解了如何使.htaccess生效,说实话网上的教程都过时了,还一大堆复制粘贴怪,看的人怪闹心的,这次是完全我自己试出来的,对apache配置文件加深了了解。还了解了.htaccess的两种写法。今天可以说收获颇丰。
参考链接
`