Apache mod_rewrite中的REQUEST_URI使用实例
Apache mod_rewrite 是一个强大的URL重写模块,常用于优化网站的URL结构,实现SEO友好、隐藏实际路径或处理无效请求。在本实例中,我们将深入理解如何使用REQUEST_URI这一关键变量,以及如何解决在URL重写过程中遇到的问题。 REQUEST_URI是Apache服务器中一个预定义的环境变量,它包含了客户端请求的原始URL路径,不包括协议、主机名和查询字符串。在URL重写过程中,REQUEST_URI的值通常不会改变,除非通过特定的方法如[E]标记来设置环境变量。 我们看第一个例子,其目标是将`sitemap_index.xml`这样的请求重定向到`sitemap/index`: ```apache RewriteEngine on # sitemap index xml rewrite RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1 [L] ``` 这里的[L]标志表示这是最后一条规则,阻止进一步的重写。然而,当访问`sitemap_index.xml`时,`index.php`接收到的`$_SERVER['REQUEST_URI']`仍是原始的`sitemap_index.xml`,而不是期望的`sitemap/index`。 为了解决这个问题,有两种策略: 1. 使用[P]标记配合mod_proxy。这将使请求内部转发,改变REQUEST_URI的值,但会产生额外的HTTP请求: ```apache # sitemap index xml rewrite RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1 [P,L] ``` 2. 设置环境变量(Environment Variable)`REQUEST_URI`。这允许我们在不增加额外HTTP请求的情况下传递期望的URI: ```apache # sitemap index xml rewrite RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1 [E=REQUEST_URI:/sitemap/$1,L] ``` 或者 ```apache # sitemap index xml rewrite RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ index.php [E=REQUEST_URI:/sitemap/$1,L] ``` 在这里,[E]标记用于设置环境变量,`REDIRECT_REQUEST_URI`变量会被设置为 `/sitemap/$1`,并且可以通过`$_SERVER['REDIRECT_REQUEST_URI']`获取。 值得注意的是,`SetEnvIfNoCase`指令在`mod_setenvif`模块中使用时,其`Request_URI`属性会反映出经过重写后的URL,而不是原始的GET/POST请求中的URI。因此,尝试使用`SetEnvIfNoCase Request_URI "sitemap"`来针对`sitemap`设置环境变量是无效的,因为它检查的是`index.php`,而不是`sitemap_index.xml`或`sitemap/index`。 为了解决这个问题,可以在重写规则开始时保存原始的REQUEST_URI: ```apache SetEnvIfNoCase Request_URI "(^/sitemap_.*\.xml)" MY_REQUEST_URI_BF_REWRITE=$1 ``` 然后在需要的地方使用这个保存的环境变量: ```apache SetEnvIfNoCase MY_REQUEST_URI_BF_REWRITE "sitemap" ... ``` 通过这种方式,你可以确保在任何重写操作后仍然能够访问到原始的请求URI,从而实现更精确的URL管理和控制。在实际应用中,理解和掌握REQUEST_URI及重写规则中的环境变量设置是优化网站性能和功能的关键。
























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2022网络编辑求职信_.docx
- EMC面向中型企业Oracle数据库建议书.pptx
- excel表格左边编号没有了.pdf
- asp心得体会.docx
- 基于YOLO的交通标志检测方法研究PDF
- IE工业工程培训全套教材项目管理.pptx
- 2023年计算机选择题题库.docx
- 2022门户网站建设策划书.docx
- 第4章Hadoop分布式计算框架.pptx
- GIS技术支持下森林公园道路选线的辅助设计.pdf
- 2019年网络编辑年终总结范文.doc
- 2022项目管理个人年终总结.docx
- 2023年全国计算机等级考试三级信息管理笔试.doc
- 操作系统模拟进程课程设计.doc
- (完整版)基于PLC的智能温室控制系统的设计文献综述.doc
- “好健康”网站策划报告.doc


