Apache和Nginx设置伪静态(URL Rewrite)的方法
我就用这个网站为例子介绍下具体的配置,在Apache中有两种方法配置,一是通过httpd.conf文件,二是通过.htaccess文件,策略语句的原理是使用正则表达式来匹配访问路径,并按照规则替换成指定的路径:
使用httpd.conf来配置rewrite策略:
要使用httpd.conf文件来设置伪静态策略,我们可以直接在httpd.conf中写入如下代码,如果您的网站是配置在VirtualHost中,则将这段代码加到对应的
使用.htaccess来配置rewrite策略
检查httpd.conf中的
RewriteEngine on
RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3
复制代码保存后重启httpd服务即可生效
常见问题:
Q:为何都按上面设置了缺还是无法静态化?
A:很有可能是因为别的目录设置项覆盖了
Nginx:
Nginx下设置伪静态方法与Apache差不多,直接在nginx.conf (或者在对应的*.conf) 中找到需设置伪静态规则的服务器对应字段,在server{ location/{ } }中添加以下代码:
server {
listen 80 default_server;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
rewrite ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3;
}
}
添加后重启Nginx服务即可生效!
正则表达式匹配
就用上面的例子中的伪静态策略来简单解释下正则表达式在配置的作用:
策略:RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3
请求路径:http://www.abc.com/list-123-456.html
本策略分成两段,第一段是使用正则表达式去匹配请求访问的路径,第二段是将匹配后的参数转化为真实访问的路径。策略执行时:^(.*)list-([0-9]+)-([0-9]+)\.html$ 与 /list-123-456.html 这个字符串进行匹配:
^和$字符分别代表了匹配输入字符串的开始和结束
()中的匹配到的内容会被按顺序分配到变量$1 $2 $3中
.*匹配任意字符串,且长度从0个到多个,故$1值为/
[0-9]+匹配字符0-9,长度1个到多个,故$2和$3分别是123和456
所以最后真实访问的动态地址为 /list.php?page=123&id=456
上面只是介绍了基本的配置策略,其实这个rewrite规则还有非常多的玩法,例如使用RewriteCond进行域名层面的重写跳转,接下来可以找些资料慢慢补充。