我正在构建一个需要包含“检查”程序的网站,以便为用户会话执行几项启动任务。示例包括检查他们是否接受 Cookie、确定他们的 IP 地址是否授予他们特定权限等。
检查完成后,我需要将用户重定向回他们最初请求的页面。
RewriteCond
如果用户没有设置特定的 cookie,则计划使用并将所有 URL 映射到“启动器”。
假设我想要将所有 URL 重写为(当然,最终需要满足一些条件):
/foo?original_url=...
其中...
是请求的原始 URL(经过 URL 编码)。
我最接近的是这样的:
RewriteRule ^(.*)$ http://localhost/php/cookie.php$1 [R=301]
然后我可以通过 检查反向引用中捕获的原始 URL PATH_INFO
。然而,这很混乱——我会很多倾向于将该值作为 URL 参数传递
答案1
看http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_qsa,它涵盖了这个确切的用例。
简而言之,使用:
RewriteRule /pages/(.+) /otherpage?page=$1 [QSA,R=301,B]
应该B
重新逃离原来的路径。
答案2
或者,如果你不重定向,而是使用 FallbackResource 指令,那么你可以在环境变量 REQUEST_URI 中访问原始请求的 URI
FallBackResource /cookie.php
这样做的另一个好处是避免了必须执行明确的 RewriteCond 来避开其他有效资源(图像、css 以及其他您希望正常处理的内容)。
看http://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource了解详情。