我正在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 。