Apache mod_rewrite中的REQUEST_URI使用实例_Linux

如下规则:

复制代码 代码如下:

RewriteEngine on
# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1
# redirected all invalid request the the index bootstrap
RewriteRule !\.(htm|txt|xml|css|js|swf|gif|jpg|png|ico)$ index.php [L]

假设访问 sitemap_index.xml ,当经过两次RewriteRule之后,传给bootstrap程序 index.php 的 $_SERVER['REQUEST_URI'] 值仍然是 /sitemap_index.xml ,但实际上希望是 /sitemap/index ,这样 index.php 才能正确的进行 url route 。

要达到这个目的,有两个方法。

第一种方式,配合 mod_proxy ,将第一条重写规则改为

复制代码 代码如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1 [P,L]

这样将在内部产生一个新的URL请求, REQUEST_URI 的值也就变成了新的 /sitemap/index 。但这种方法制造了额外的一次 http 请求。

第二种方法,将第一条规则改为

复制代码 代码如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ /sitemap/$1 [E=REQUEST_URI:/sitemap/$1]

或者

复制代码 代码如下:

# sitemap index xml rewrite
RewriteRule ^sitemap_([a-zA-Z0-9_\-]+)\.xml$ index.php [E=REQUEST_URI:/sitemap/$1,L]

然后通过 $_SERVER['REDIRECT_REQUEST_URI'] 变量得到 值 /sitemap/index (注意使用 E 设置环境变量的时候,mod_rewrite 自动给变量加上 REDIRECT_ 前缀)。

有趣的是在 Rewrite 的过程中 REQUEST_URI 的值始终保持是原始的请求URI,但在 mod_setenvif 中提供的 SetEnvIf / SetEnvIfNoCase 中所使用的 Request_URI 属性得到的却是经过 rewrite 之后的地址而非原始 GET/POST 中的 URI。

所以如果在 httpd.conf / httpd-vhosts.conf 中想使用

复制代码 代码如下:

SetEnvIfNoCase Request_URI "sitemap" ...

来针对 sitemap 设置环境变量的话是不起作用的,因为这时候传给 SetEnvIfNoCase 进行判断的 Request_URI 是 index.php 而不是 sitemap_index.xml 或 sitemap/index 。想要得到原始的 Request_URI 信息就必须在 rewrite 规则的最开始进行保存,比如在 rewrite 规则开头加入

复制代码 代码如下:

SetEnvIfNoCase Request_URI "(^/sitemap_.*\.xml)" MY_REQUEST_URI_BF_REWRITE=$1

然后在需要的地方使用

复制代码 代码如下:

SetEnvIfNoCase MY_REQUEST_URI_BF_REWRITE "sitemap" ...

时间: 2024-09-28 01:07:44

Apache mod_rewrite中的REQUEST_URI使用实例_Linux的相关文章

Shell脚本实现apache日志中的状态码分析_linux shell

一.首先将apache日志按天切割 复制代码 代码如下:        vi /etc/httpd/conf/httpd.conf         ErrorLog "|rotatelogs /var/log/httpd/%Y%m%derror_log 86400 480"        CustomLog "|rotatelogs /var/log/httpd/%Y%m%daccess_log 86400 480" combined 二.重启apache服务 复制

Shell脚本实现分析apache日志中ip所在的地区_linux shell

查询ip地址所用的组件 复制代码 代码如下: wget http://rfyiamcool.googlecode.com/files/nali-0.1.tar.gz  tar zxvf nali-0.1.tar.gz  cd nali-0.1  ./configure && make && make install  步骤和nginx是差不多的,只是取日志里面的ip地址的方法不一样~~~ 复制代码 代码如下: #!/bin/bash  #rfyiamcool  IPSUMF

linux bash shell中case语句的实例_linux shell

bash case语句的例子. 分享一段bash shell代码,对于学习bash的同学理解case语句的用法,会有帮助. 例子: 复制代码 代码如下: #!/bin/bash### Program:# File operation# 1.) Open file 2.) Display file 3.) Edit file 4.) Delete file# site: WWW.JB51.NETPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/u

Apache中配置支持CORS(跨域资源共享)实例_Linux

当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题,如果用jsonp或者proxy的方式进行修改的话未免需要太大的工程量,所以采用CORS这种比较简单高效的技术.相比JOSP的方式,CORS更为高效.JSONP由于它的原理只能实现GET请求,而CORS支持所有类型的HTTP请求.使用CORS,可以使用普通的ajax实现跨域,这对于前端

Apache服务器中.htaccess文件的实用配置示例集锦_Linux

.htaccess 是什么? htaccess (hypertext access,超文本访问) 是为网站所有者提供用于控制服务器环境变量以及其它参数的选项,从而增强他们网站的功能的文件.这些文件可以在网站目录树的任何一个目录中,并向该目录以及目录中的文件和子目录提供功能. 这些功能是什么呢?其实这些是服务器的指令,例如命令服务器执行特定任务的行,这些命令只对该文件所在目录中的文件和子目录有效.这些文件默认是隐藏的,因为所有操作系统和网站服务器默认配置为忽略它们,但如果查看隐藏文件的话,你就可以

Apache mod_rewrite实现HTTP和HTTPS重定向跳转_Linux

当你的站点使用了HTTPS之后,你可能会想把所有的HTTP请求(即端口80的请求),全部都重定向至HTTPS(即端口443).这时候你可以用以下的方式来做到:(Apache mod_rewrite) <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://jb51.net/$1 [R=301,L] </IfModule&

使用apache mod_rewrite方法随机提供payloads

本文讲的是使用apache mod_rewrite方法随机提供payloads,本文中讲述的方法更适用于真实渗透测试环境中,因为电子邮件钓鱼往往是威胁到整个公司,而不是只威胁到红队的测试环境.因为电子邮件钓鱼具有高针对性,并且手动设置攻击载荷对攻击来说也是很麻烦的.所以请阅读这篇文章,我会通过设置一个apache重定向器或者直接设置一个服务器,通过RewrieMap从预定义的攻击payload列表中随机选取payload进行提供. apache中RewriteMap方法允许外部的程序比如脚本,数

php检测apache mod_rewrite模块是否安装的方法_php技巧

本文实例讲述了php检测apache mod_rewrite模块是否安装的方法.分享给大家供大家参考.具体实现方法如下: /** * @title Check if Apache's mod_rewrite is installed. * * @author Pierre-Henry Soria <ph7software@gmail.com> * @copyright (c) 2013, Pierre-Henry Soria. All Rights Reserved. * @return bo

Apache rewrite的重写相关的参数说明_Linux

Apache mod_rewrite规则重写的标志一览 R[=code](force redirect) 强制外部重定向 强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码. F(force URL to be forbidden)禁用URL,返回403HTTP状态码. G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码. P(force proxy)