如何在URL中替换timestamp占位符?

时间:2014-02-05 02:19:41

标签: regex apache .htaccess mod-rewrite

我正在寻找一种方法来模仿我在广告服务器上看到的行为,以进行内部测试和跟踪。我希望能够在我的网址中检查并替换某些占位符,例如 {timestamp}

说我有这样的网址:http://suchandsuchasite.com/frogs.php?x=43&thetime={timestamp}&bird=albatross。我目前的理论是,我应该能够在.htaccess文件中添加RewriteRule,将字符串{timestamp}替换为实际的当前时间戳。但我是mod_rewrite的新手,并不是所有熟悉正则表达式的人,所以我在开展这项工作方面进展非常缓慢。我到目前为止所有的一切是:

RewriteCond %{QUERY_STRING} &?thetime={timestamp}$

......我甚至不确定这是否正确。我一直在查看Apache文档,所以我知道下一行应该遵循以下语法:

# RewriteRule *Pattern* *Substitution* [flags]

...但我不确定如何只替换那个变量并保留查询字符串的其余部分。此外,甚至可以从.htaccess文件中以某种方式获取当前时间戳吗?我应该通过PHP标头来做这件事吗?或者其他完全不同的东西?

非常感谢您愿意提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

暂时忽略为什么要执行此操作,您可以通过mod_rewrite 程序地图执行此操作 - 即,重写地图通过运行一些代码生成替换字符串。这样的事情可能有用:

RewriteMap timemap program:/path/to/file/timestamper.py
RewriteRule {timestamp} ${timemap:NULL}

/path/to/timestamper.py

#!/usr/bin/python

import sys
import time

while True:
  request = sys.stdin.readline().strip()
  response = int(time.time())
  sys.stdout.write(response + '\n')
  sys.stdout.flush()

Apache在Web服务器启动时启动timestamper.py,并且 然后喂它重写。在这种情况下,Apache总是发送它 NULL,脚本忽略输入值并输出Unix 时间戳。

请注意,mod_rewrite处理请求(它没有 过滤您的网页/网络应用/等生成的网址。正如CBroe所说, 目前还不清楚在这一点上重写URL是你想要的 要做。