如何重写 URL 并将原始 URL 作为参数传递?

如何重写 URL 并将原始 URL 作为参数传递?

我正在构建一个需要包含“检查”程序的网站,以便为用户会话执行几项启动任务。示例包括检查他们是否接受 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了解详情。

相关内容