博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache和Nginx设置伪静态(URL Rewrite)的方法
阅读量:6931 次
发布时间:2019-06-27

本文共 2358 字,大约阅读时间需要 7 分钟。

Apache 2.x

1、首先我们要确认Apache已经正确加载了mod_rewrite模块
      检查httpd.conf中是否有LoadModule Rewrite_module modules/mod_Rewrite.so这段代码,如没有请加上。
            <ignore_js_op>1.png 
      可以使用phpinfo确认是否已经正确加载此模块,如已加载,mod_rewrite会显示在Loaded Modules中,如图:
          <ignore_js_op>2.png 
2、策略配置。现有一个网站,根目录为/var/www/html,动态页面地址为/list.php?page=123&id=456,现在我们想要的效果是/list-123-456.html
             <ignore_js_op>3.png 
            
      我就用这个网站为例子介绍下具体的配置,在Apache中有两种方法配置,一是通过httpd.conf文件,二是通过.htaccess文件,策略语句的原理是使用正则表达式来匹配访问路径,并按照规则替换成指定的路径:

使用httpd.conf来配置rewrite策略:
要使用httpd.conf文件来设置伪静态策略,我们可以直接在httpd.conf中写入如下代码,如果您的网站是配置在VirtualHost中,则将这段代码加到对应的<VirtualHost hostname> <VirtualHost>
标签内:
<IfModule mod_rewrite.c>
#输入: list-123-456.html 
#输出: list.php?page=123&id=456 
RewriteEngine on
RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$1&id=$2
</IfModule>
添加完成后重启httpd服务后即可生效
使用.htaccess来配置rewrite策略
检查httpd.conf中的<Directory />标签配置,确认AllowOverride配置为All,这样才能启用.htaccess文件:
<Directory />
Options FollowSymLinks
AllowOverride 
Al
l
</Directory>
检查httpd.conf中的AccessFileName参数,确认为.htaccess
AccessFileName 
.htaccess
在网站根目录下建立.htaccess文件,写入如下内容:
  1. RewriteEngine on 
  2. RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3
复制代码
保存后重启httpd服务即可生效
常见问题:
Q:为何都按上面设置了缺还是无法静态化?
A:很有可能是因为别的目录设置项覆盖了<Directory />标签内的选项,导致.htaccess文件没起作用。这个问题一般出现在网站根目录的Directory标签中,在这个例子中,可以检查<Directroy
"/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进行域名层面的重写跳转,接下来可以找些资料慢慢补充。

转载于:https://www.cnblogs.com/liuzhen123/p/8125835.html

你可能感兴趣的文章
gulp前端自动化工具的快速入门案例
查看>>
Java_数据交换_Jackson_用法入门
查看>>
GoCD 19.2.0 发布,ThoughtWorks 的持续集成引擎
查看>>
H3C大数据产品介绍
查看>>
Kafka-0.10.0.0 集群高可靠实验
查看>>
微信程序开发系列教程(三)使用微信API给微信用户发文本消息
查看>>
window上安装mysql数据库
查看>>
Python全栈工程师(多继承、函数重写)
查看>>
Spark2.1.0之内置RPC框架
查看>>
js对于小数的处理
查看>>
Jenkins - 构建Allure Report
查看>>
完美数据迁移-MongoDB Stream的应用
查看>>
http2-stream-optima-prioritation
查看>>
spring事件驱动模型--观察者模式在spring中的应用
查看>>
MySQL性能优化速记
查看>>
十问 | 关于Service Mesh 和Kubernets的最前沿思考
查看>>
你必须非常努力,才可以看起来毫不费力。
查看>>
Maven就是这么简单
查看>>
css loading
查看>>
不能ssh连接ubuntu linux 服务器 secureCRT不能ssh连接服务器 不能远程ssh连接虚拟机的ubuntu linux...
查看>>