Apache
版本 2.4.35
Apache配置伪静态有两种方法,一种是配置文件添加,一种是.htaccess文件添加。
首先确认是否打开了mod_rewrite模块:
LoadModule rewrite_module modules/mod_rewrite.so
以下将访问 test-a-b.php 转换成 test.php?a=&b= 的形式
1.配置文件
可以在httpd.conf或httpd-vhosts.conf中配置,以下选择vhosts文件为例,如下:
<VirtualHost *:80>
...
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)test-([0-9]+)-([0-9]+)\.html$ $1test.php?a=$2&b=$3 [QSA]
</IfModule>
</VirtualHost>
每次修改规则需要重启apache。
2. .htaccess
<VirtualHost *:80>
Options FollowSymLinks #需要打开FollowSymLinks级别以上
<Directory (指定目录) >
AllowOverride all
</Directory>
</VirtualHost>
然后在指定的目录或子目录下添加文件 .htaccess ,内容为:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)test-([0-9]+)-([0-9]+)\.html$ $1test.php?a=$2&b=$3 [QSA]
</IfModule>
子目录的.htaccess会覆盖父目录,每次修改不需要重启服务器。
RewriteRule 语法规则: RewriteRule pattern substitution flags
1.Pattern
表示一个正则的匹配规则,对URL的Origin(例如:http://localhost:80/)后面的部分但不包括查询字符串进行匹配 。如果要否定这个规则,则在正则表达式前加!。
2.substitution
使用它作为替换字符串 例如: /abc/ab.html 重写为url路径 、abc/ab.html 重写为本地文件路径、http://localhost:8888/abc/ab.html 重写为绝对网址。
3.flags
用于改变规则行为。目前有如下flag可使用:
C Chain :使用[Chain]或[C]标志,可以指示应将多个规则链接在一起作为单个逻辑转换。
E:设置环境变量
F:返回403响应
G:返回410响应
QSA 追加查询字符串。
NC 不区分大小写
L 表明当前规则是最后一条规则,停止解析后面的规则
P自身作为代理,将请求转发到另一个服务器,需要mod_proxy
PT:不执行文件的映射,得到的结果仍然是url
R=code 重定向
rewriteCond则指明rule的生效条件。
RewriteCond %{REQUEST_FILENAME} !-f 测试访问的文件名是否有真正的文件
Nginx
location (匹配url) {
...
rewrite ^(.*)test-([0-9]+)-([0-9]+)\.html$ $1test.php?a=$2&b=$3
}
或 使用 include 单独引入写好的包含location的文件
参考
https://www.cnblogs.com/kynewu/p/9088550.html apache和nginx伪静态配置
https://www.linuxidc.com/Linux/2018-05/152502.htm nginx匹配语法规则
https://cwiki.apache.org/confluence/display/HTTPD/Rewrite apache httpd官方文档