1. 云栖社区>
  2. PHP教程>
  3. 正文

Apache和Nginx设置伪静态(URL Rewrite)的方法

作者:用户 来源:互联网 时间:2017-12-01 16:07:21

urlnginxapache静态设置方法rewrite

Apache和Nginx设置伪静态(URL Rewrite)的方法 - 摘要: 本文讲的是Apache和Nginx设置伪静态(URL Rewrite)的方法,前言伪静态就是将原来动态化的页面址转换成为静态化的地址,例如: 原访问地址:http://www.test.com/list.php?page=123&id=456 伪静态地址:http://www.test.com/list-12

前言伪静态就是将原来动态化的页面址转换成为静态化的地址,例如:

原访问地址:http://www.test.com/list.php?page=123&id=456

伪静态地址:http://www.test.com/list-123-456.html

这样原来的动态地址变成一个静态的地址,更有利于搜索引擎的收录,伪静态化在站长进行SEO时是一个必要的操作,下面我来详细介绍一下在Apache和Nginx中伪静态的设置方法。Apache 2.x1、首先我们要确认Apache已经正确加载了mod_rewrite模块 检查httpd.conf中是否有LoadModule Rewrite_module modules/mod_Rewrite.so这段代码,如没有请加上。Apache和Nginx设置伪静态(URL Rewrite)的方法标签配置,确认AllowOverride配置为All,这样才能启用.htaccess文件:

Options FollowSymLinks
AllowOverride
Al
l

检查httpd.conf中的AccessFileName参数,确认为.htaccess
AccessFileName
.htaccess
在网站根目录下建立.htaccess文件,写入如下内容: RewriteEngine on
RewriteRule ^(.*)list-([0-9]+)-([0-9]+)/.html$ $1list.php?page=$2&id=$3复制代码保存后重启httpd服务即可生效常见问题:
Q:为何都按上面设置了缺还是无法静态化。
A:很有可能是因为别的目录设置项覆盖了标签内的选项,导致.htaccess文件没起作用。这个问题一般出现在网站根目录的Directory标签中,在这个例子中,可以检查 "/var/www/html">标签内的AllowOverride参数是否设置为All。Q:.htaccess文件放在网站根目录,那子目录也可以实现伪静态吗。
A:.htaccess默认对所在目录下所有子目录生效,但是如果子目录中也放置了.htaccess文件,则该子目录下的访问规则以子目录中的.htaccess文件为准。
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进行域名层面的重写跳转,接下来可以找些资料慢慢补充。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索url , nginx , apache , 静态 , 设置 , 方法 rewrite ,以便于您获取更多的相关知识。