我如何重写URL并将原始URL作为parameter passing?

我正在build立一个网站,需要包括一个“检查”程序,为用户的会话做几个启动任务。 例子包括检查他们是否接受cookie,确定他们的IP地址是否授予他们特定的权限等。

一旦检查完成,我需要将用户redirect到他们最初请求的页面。

该计划是使用RewriteCond并将所有URL映射到“发起者”,如果用户没有设置特定的cookie。

比方说,我想重写所有url(当然最终还是有一些条件),以便:

 /foo?original_url=... 

其中...是请求的原始url,由url编码。

我得到的最接近的是这样的:

 RewriteRule ^(.*)$ http://localhost/php/cookie.php$1 [R=301] 

然后,我可以通过PATH_INFO检查反向引用中捕获的原始URL。 但是,这是相当混乱 – 我愿意将该值作为URLparameter passing

请参阅http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_qsa ,其中涵盖了这个确切的用例。

总之,使用:

 RewriteRule /pages/(.+) /otherpage?page=$1 [QSA,R=301,B] 

B应该重新逃脱原来的path。

或者,如果您不redirect,而是使用FallbackResource指令,则可以访问env中的原始请求URI var REQUEST_URI

  FallBackResource /cookie.php 

这样做还有另外一个好处,就是避免了为了避免其他有效的资源(图像,css和其他你想要正常处理的东西)而做显式RewriteCond的必要性。

有关详细信息,请参阅http://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource