Mod_rewrite无法使用电子邮件广告系列中的外部链接

时间:2011-03-21 15:40:58

标签: php .htaccess mod-rewrite

寻求一些帮助,让我的网站了解电子邮件中使用的链接,该电子邮件中有几个$ _GET vars可以在地​​址栏上整齐地显示。

该电子邮件是营销电子邮件活动的一部分,并发送到许多地址,电子邮件中的链接是动态的,并从电子邮件中获取嵌入的信息以填充$ _GET变量。

即。 www.foobar.com?page=twenty2talk&name=Joe Bloggs& position = director& company = The Butchers& telephone = 000& email=joe.bloggs@thebutchers.co.uk

因此,使用电子邮件中使用的上述链接示例,用户点击该链接示例并按照规范定向到我们的网站。

我遇到的麻烦是通过mod re_write转换该信息($ _GET变量内容将始终改变)。

在我的.htaccess文件中,我有以下RewriteRule。

RewriteRule ^twenty2talk$       index.php?
                                  page=twenty-2-talk
                                  &name=$1
                                  &position=$2
                                  &company=$3
                                  &telephone=$4
                                  &email=$5 [L]

我希望我没有错过任何关键信息,但如果是这样,请告诉我。

提前致谢,

2 个答案:

答案 0 :(得分:1)

Querystring追加

我假设您在电子邮件中的链接看起来像这样

www.foobar.com/twenty2talk?name=Joe Bloggs&position=director&
    company=The Butchers&telephone=000&email=joe.bloggs@thebutchers.co.uk

并且您希望获得此基础网址

www.foobar.com/index.php?page=twenty2talk&name=Joe Bloggs&position=director&
    company=The Butchers&telephone=000&email=joe.bloggs@thebutchers.co.uk

(仅为清晰起见插入了换行符。)

如果你真的需要匹配查询字符串中的东西(之后的东西?),你可以,但不能单独使用RewriteRule。幸运的是你不需要。在mod_rewrite中有一个名为querystring append的东西,它允许你只是向现有的查询字符串添加一些内容。

RewriteRule ^twenty2talk/?$       index.php?page=twenty-2-talk [QSA,L]

该规则添加page=twenty-2-talk但也保持名称等不变。 /?部分允许使用或不使用尾部斜杠编写起始URL,这是一种很好的做法。问号的字面意思是“匹配前一个字符0或1次”。

如果您有多个此类广告系列,则可以编写更具动态性的规则:

RewriteRule ^(twenty2talk|winfreebeer|wowamazing)/?$ index.php?page=$1 [QSA,L]

在这个特定的例子中,将Tweettalk wille重写为page=twenty2talk而不是连字符,而不是page=twenty-2-talk。但这没关系 - 只需在PHP代码中检查两者。

为了未来 - 一个包罗万象的规则

将来我建议为所有广告系列使用一个特殊的虚拟“文件夹”,这样可以实现一个包罗万象的规则。

RewriteRule ^campaigns/([^/]+)/?$ index.php?page=$1 [QSA,L]

该规则将抓住

www.foobar.com/campaigns/twenty2talk?name=...
www.foobar.com/campaigns/winfreebeer?name=...
www.foobar.com/campaigns/wowamazing?name=...

等。所以你不需要为每个广告系列重写.htaccess文件。

答案 1 :(得分:0)

您的重写规则不正确,您使用占位符($ X),但您没有抓到任何内容。

此外,如果我阅读它,它会告诉“www.foobar.com/twenty2talk”到www.foobar.com/index.php?page=twenty-2-talk&name=$1&position=$2&company= $ 3&电话= $ 4& email = $ 5 [L]

我不确定那是你想要实现的......

你能写下一个可以给重写模块(好的)和它必须导致的一个例子(php得到一个)