0

0

Apache的URL地址重写

黄舟

黄舟

发布时间:2016-12-21 11:21:21

|

2995人浏览过

|

来源于php中文网

原创

第一种方法:apache环境中如果要将url地址重写,正则表达式是最基本的要求,但对于一般的url地址来说,基本的匹配就能实现我们大部分要求,因此除非是非常特殊的url地址,但这不是我要讨论的范围,简单几招学会apache中url地址重写,通过实例展示,轻松学会url地址重写:    

002    

003    URL实例    

004    

005    重写URL:http://www.baidu.com/?p=152    

006    

007    原始URL:http://www.baidu.com/p152.html    

008    

009    重写规则:    

010    

011    ^p([0-9]+)\.html      /?p=$1     [L]    

012    

013    正则基础知识:    

014    

015    ^ 匹配行的开始,匹配URL地址的开头部分,对于RewriteRule而言,域名(http://www.xxxx.com)不是URL地址的一部分,如上:?p=152    

016    

017    () 分隔一个被捕获的表达式,如上:([0-9]+)    

018    

019    [] 定义字符类,如上:[0-9] 表示从0-9的数字    

020    

021    + 说明前面的字符可以被重复匹配1次或数次,如上:[0-9]+,表示任何数字组合    

022    

023    \ 字符转义,如上:转义.    

024    

025    其它:    

026    

027    [L] 表示last,停止匹配其它    

028    

029    方法如下:    

030    

031    1,打开httpd.conf文件,找到    

032    

033    #LoadModule rewrite_module modules/mod_rewrite.so 注释前面#    

034    

035    2,打开httpd-vhosts.conf文件,在VirtualHost添加重写规则,    

036    

037    RewriteEngine On    

038    

039    RewriteRule ^p([0-9]+)\.html      /?p=$1     [L]    

040    

041    基本上就上面这两个步骤,其实总的来说,Apache中URL地址重写还是比较简单的,比看文档学习要快的多,不过要想深入了解还是有必要看看相关文档的,其它规则可以自定义。记住一点:任何匹配其实就是一个正则表达式的替换过程。    

042    

043    创建友好的搜索引擎URL地址对于PHP程序员来说非常重要,因此简单学会Apache中URL地址重写将是一项最基本的要求。    

044    

045    

046    第二种方法:    

047    

048    1,首先检查是否已安装rewrite模块:    

049    

050    cat httpd.conf | grep rewrite    

051    LoadModule rewrite_module modules/mod_rewrite.so    

052    

053    2,生成伪静态html连接:    

054    

055    (1)生成伪静态html    

056    

057    在段最后加入    

058    

059    RewriteEngine on    

060    RewriteRule /goods([0-9]+).html /goods.php?id=$1 [PT]    

061    更标准的写法为:    

062    RewriteRule ^(.*)/goods([0-9]+).html$ $1/goods.php?id=$2 [PT]    

063    更简洁的写法:    

064    /goods(\d+)\.html /goods\.php\?id=$1    

065    

066    第一个(0-9]+)对应参数$1,以此类推第二个对应$2    

067    

068    举例:    

069    

070    RewriteRule /forum-([0-9]+)-([0-9]+)\.html /forumdisplay.php?fid=$1&page=$2 [PT]    

071    

072    测试http://www.xxx.com/goods1.html 是否与/goods.php?id=1的内容相同    

073    

074    最后将所有链接换成设置后的伪静态html地址方式    

075    

076    

077    [PT]:url全局转换,即转换过的goods31.html对应goods.php?id=31 (默认就是这个不加参数)    

078    [R]:    url重定向  即使用goods31.html访问时跳转到goods.php?id=31    

079    

080    

081    3,防盗链:    

082    

083    RewriteCrond %{HTTP_HOST} !xxxx.com [R=301,L]    

084    RewriteRule ^(.*)$ http://www.xxxx.com/warning.html [R=301,L]    

085    

086    把不是来自xxxx.com的请求重定向到http://www.xxxx.com    

087    

088    更好的做法:    

089    RewriteCond %{HTTP_REFERER} !^http://(www\.)?xxxx\.com/.*$ [NC]    

090    RewriteRule \.(mp3|rar|jpe|gif)$ http://www.xxxx.com/warning.jpg [R=301,L]    

091    

092    4,防百度爬虫:    

093    RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [OR]    

094    RewriteRule ^(.*)$ http://www.google.com [R=301,L]    

095    把来自百度的爬虫转到goole    

096    

097    

098    

099    

100    PS:PHP伪静态方式    

风渡网上购物系统
风渡网上购物系统

这是一套完全免费的网上购物系统,无任何功能限制,该系统的所有功能均是开放可用的。省钱、省时、省力,又能使用到最好的asp网上购物系统。程序采用asp语言,纯手写代码,语言精练,无垃圾代码、文件。以“更快、更高、更强”为设计理念,以“服务第一,用户至上”为宗旨,为您打造功能强大、安全可靠、独具个性的网上商城后台地址:/a

下载

101    

102    方法一:    

103    

104    比如这个网页    

105    

106    http://www.xxxx.com/soft.php/1,100,8630.html    

107    

108    其实处理的脚本是soft.php 参数为1,100,8630    

109    

110    相当于soft.php?a=1&b=1=100&c=8630 只不过这样的URL太难记。搜索引擎也不喜欢。    

111    

112    真静态只是完全生成了HTML。    

113    

114    客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。    

115    

116    当然在你网站的流量没有那么大的时候。URL重写是最好的方法(个人观点,大流量的时候可以考虑负载均衡了。同样没有关系)    

117    

118    附URL重写的方法有很多种,APACHE,IISREWRITE。甚至PHP脚本都可以直接处理。比如上例中就是PHP脚本直接处理(该方法好处是大流量的时候直接减轻WEB伺服器的压力。PS:同样也是个人观点:    

119    

120    ================================================    

121    

122    下面以程序为例讲一下PHP伪静态的程序实现方法,其实这方法我之前已经有在其它论坛社区发过    

123    

124124    程序为例:    

125    

126    http://www.xxxx.com/soft.php/1,100,8630.html    

127    

128    CODE:    

129    

130    //利用server变量 取得PATH_INFO信息 该例中为 /1,100,8630.html 也就是执行脚本名后面的部分    

131    

132    if(@$path_info =$ _SERVER["PATH_INFO"]){    

133    //正则匹配一下参数    

134    if(preg_match("/\/(\d+),(\d+),(\d+)\.html/si",$path_info,$arr_path)){    

135    $gid =intval($arr_path[1]); //取得值 1    

136    $sid =intval($arr_path[2]); //取得值100    

137    $softid =intval($arr_path[3]); //取得值8630    

138    }else die("Path:Error!");    

139    //相当于soft.php?gid=1&sid=100&softid=8630    

140    //就是这么简单了。~)    

141    方法二:    

142    一 打开 Apache 的配置文件 httpd.conf 。    

143    二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉    

144    三 在 httpd.conf中添加:    

145        

146    RewriteEngine On    

147    #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html    

148    RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2    

149        

150    四 要实现asp帖子URL到php帖子的映射,在 第三步的之间添加:    

151    RewriteMap tolowercase int:tolower    

152    RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=d+ [NC]    

153    RewriteRule ^(.*(?:index|dispbbs)).asp 1.php?{tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1    

154    五 保存httpd.conf并重启Apache    

155    方法三:    

156    

157    function mod_rewrite(){    

158    global    

159    $ _GET;    

160    $nav=$ _SERVER["REQUEST_URI"];    

161    $script_name=$ _SERVER["SCRIPT_NAME"];    

162    $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);    

163    $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm    

164    $vars = explode("/",$nav);    

165    for($i=0;$i

166    $ _GET["$vars[$i]"]=$vars[$i+1];    

167    }    

168    return $ _GET;    

169    }    

170    mod_rewrite();    

171    $yearn=$ _GET["year"];//结果为'2006'    

172    $action=$ _GET["action"];//结果为'_add'    

173    echo $yearn;    

174    echo $action;    

175    ?>    

176    

177    function mod_rewrite(){    

178    global $ _GET;    

179    $nav= $ _SERVER["REQUEST_URI"];    

180    $script_name= $ _SERVER["SCRIPT_NAME"];    

181    $nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);    

182    $nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm    

183    $vars = explode("/",$nav);    

184    for($i=0;$i

185    $ _GET["$vars[$i]"]=$vars[$i+1];    

186    }    

187    return    

188    $ _GET;    

189    }    

190    mod_rewrite();    

191    $yearn= $ _GET["year"];//结果为'2006'    

192    $action=$ _GET["action"];//结果为'_add'    

193    echo $yearn;    

194    echo $action;    

195    很多情况下,某个 IP 的访问很容易造成 CPU 100% (比如某些搜索引擎的固定抓取,别人大量的采集站点),这个时候我们就要利用一些有效的手段封掉对方的 IP,让他无法消耗服务器的资源,封 IP 的方法有很多种,如果你的 Web 服务器安装了 Rewrite 模块的话,也可以试试利用 Rewrite 规则封掉对方的 IP。    

196    1、例如我们把某个特定的 IP 直接重定向到 baidu 首页,在网站根目录的 .htaccess 文件里添加代码:    

197    RewriteCond % 123.123.123.123 [NC]RewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301] 将 123.123.123.123 这个 IP 替换成您要限制的 IP 即可    

198    2、如果要实现多个 IP ,可以这样写:    

199    RewriteCond % 123.123.123.123 [OR]RewriteCond % 124124.124124.124124.124124 [NC]RewriteRule ^(.*)$ http://www.baidu.com/$1 [R=301]    

 以上就是Apache的URL地址重写的内容,更多相关内容请关注PHP中文网(www.php.cn)! 

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

28

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

8

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

31

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

3

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

5

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

35

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

12

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

40

2026.01.26

抖币充值官方网站 抖币性价比充值链接地址
抖币充值官方网站 抖币性价比充值链接地址

网页端充值步骤:打开浏览器,输入https://www.douyin.com,登录账号;点击右上角头像,选择“钱包”;进入“充值中心”,操作和APP端一致。注意:切勿通过第三方链接、二维码充值,谨防受骗

7

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.2万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号