【PHP 】 伪静态 - 3. 伪静态的基本使用
原理图:
原先浏览器输入的网址会发送到apache服务器,然后apache会调用php模块来处理,最后找到你所想访问的页面; 如果在apahce, httpd.conf文件中开启rewrite机制,则apache会去查看可以匹配的规则,然后解析用户所输入的伪静态地址找到所想访问的php页面。
步骤开始:
1. 启用rewrite模块,在默认的情况下是没有启用的。
修改httpd.conf文件:LoadModule rewrite_module modules/mod_rewrite.so
确认是否启动成功<?php phpinfo();?>
2. 配置虚拟主机
第一种配置方式
http.conf的配置文件,打开它。
然后去修改http-vhost.conf文件:
<VirtualHost *:80>
DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"
ServerName hsp.com
<Directory>
#Directory配置节点,用于指定该目录下的文件或者是图片的访问权限
#设置虚拟主机的错误页面,欢迎页面
</Directory>
</VirtualHost>
3. 在hosts文件中配置ip和主机的对应关系
127.0.0.1 hsp.fi
4. 这时我们访问, hsp.fi/new.php
我们可以访问到页面.
一个重要的知识点:
在apache服务器中,如果某个文件夹,没有指定访问权限,则以上级目录的权限为准,如果他自己指定了访问权限,则以自己的权限为准。
在httpd.conf文件中可以看到htdocs的访问权限是Allow from all, 如果设置htdocs 的访问权限为Deny from all, 并且不设定虚拟主机文件夹的访问权限,则这个文件夹就不能被访问到。但是,如果设置文件夹的访问权限为Allow from all,就可以访问到了,这是根据子目录为准的。
如果想不让别人访问,但是允许自己访问,可以这样配置:
Order allow, deny // 这句话的意思是先看allow,再看deny
allow from 127.0.0.1
deny from all
如果想放行一个网段:
allow from 192.168.1
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> #Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Deny from all #不希望别人访问目录结构none, 如果允许别人访问则为Options indexes Options none </Directory> </VirtualHost> |
如何配置网站的欢迎页面
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> #Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Deny from all #不希望别人访问目录结构, 如果允许别人访问则为Options indexes Options indexes #配置首页面,如果abc.html没有则访问abc2.html DirectoryIndex abc.html abc2.html </Directory> </VirtualHost> |
如何配置404错误页面,引导用户进入新的页面
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> #Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Allow from All #不希望别人访问目录结构, 如果允许别人访问则为Options indexes #Options indexes #配置首页面,如果abc.html没有则访问abc2.html DirectoryIndex abc.html errorDocument 404 /err/404.html </Directory> </VirtualHost> |
使用伪静态机制
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> #Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Allow from All #不希望别人访问目录结构, 如果允许别人访问则为Options indexes #Options indexes #配置首页面,如果abc.html没有则访问abc2.html DirectoryIndex abc.html errorDocument 404 /err/404.html #开启rewrite机制 RewriteEngine On #重写rewrite rule #new-music-id100.html #$1表示反向引用,第一个子表达式的内容, 说明,如果在正则规范中直接引用表达式的内容 #则使用\n,如果是在后面引用,则使用$n RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2 </Directory> </VirtualHost> |
特别说明:
1. 一定要记住启用rewrite模块
思考:
上面的配置我们都要去修改http-vhost文件,但管理员不给你这个权限。
解决办法:
可以把配置写到 .htaccess文件
第二种配置方法:即把一部分配置放在http-vhost.conf文件
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> #Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Allow from All #不希望别人访问目录结构, 如果允许别人访问则为Options indexes #Options indexes #配置首页面,如果abc.html没有则访问abc2.html DirectoryIndex abc.html errorDocument 404 /err/404.html #如果你配置了allowoverride all这表示到对应的目录的.htaccess去匹配规则 allowoverride all </Directory> </VirtualHost> |
在对应的文件下:创建.htaccess文件(创建方法,打开记事本,另存问.htaccess文件 , 所有文件格式, 直接输入文件名是创建不起来的)
<IfModule rewrite_module> #如果rewrite_module启用 #开启rewrite机制 RewriteEngine On #重写rewrite rule #new-music-id100.html #$1表示反向引用,第一个子表达式的内容, 说明,如果在正则规范中直接引用表达式的内容 #则使用\n,如果是在后面引用,则使用$n RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2 #可以在这里写多个配置规则 </IfModule> |
请注意》项目中的.htaccess文件的配置也是继承的关系,包括重写规则也是继承的。
比如我想让用户不能访问aaa文件夹下的ttt.html, 可以aaa文件夹中创建一个.htaccess配置文件,重写规则为:
deny from all
这样用户就不能访问了
第三种方案:
只在httpd-vhost.conf文件中只留下一句话:
<VirtualHost *:80> DocumentRoot "C:/myPHP/htdocs/bigwebsite/staticPage/hsp" ServerName hsp.fi <Directory "C:/myPHP/htdocs/bigwebsite/staticPage/hsp"> allowoverride all </Directory> </VirtualHost> |
然后其他的配置都放在.htaccess文件中
#Directory配置节点,用于指定该目录下的文件或者是图片的访问权限 #设置虚拟主机的错误页面,欢迎页面 #这里可以指定是否让人访问, 如何这里没有指定访问的权限,则和上级目录的访问权限相同 #Allow from All #不希望别人访问目录结构 Options none, 如果允许别人访问则为Options indexes #Options indexes #配置首页面,如果abc.html没有则访问abc2.html DirectoryIndex abc.html errorDocument 404 /err/404.html #如果你配置了allowoverride all这表示到对应的目录的.htaccess去匹配规则
<IfModule rewrite_module> #如果rewrite_module启用 #开启rewrite机制 RewriteEngine On #重写rewrite rule #new-music-id100.html #$1表示反向引用,第一个子表达式的内容, 说明,如果在正则规范中直接引用表达式的内容 #则使用\n,如果是在后面引用,则使用$n RewriteRule news-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2 #可以在这里写多个配置规则 </IfModule> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具