【问题标题】:Mod re_write bot working with external links from an email campaignMod重写不适用于电子邮件活动的外部链接
【发布时间】:2011-05-04 22:15:42
【问题描述】:

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

电子邮件是营销电子邮件活动的一部分并发送到许多地址,电子邮件中的链接是动态的,并从电子邮件中获取嵌入信息以填充 $_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 vars 内容将始终更改)。

在我的 .htaccess 文件中,我设置了以下 RewriteRule。

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

我希望我没有遗漏任何关键信息,但如果有,请告诉我。

提前致谢,

丹。

【问题讨论】:

  • 我不明白你正在重写 from 的内容。电子邮件中的链接是什么样的?编辑:废弃该评论...

标签: php .htaccess mod-rewrite


【解决方案1】:

查询字符串追加

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

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

并且你想访问这个底层 URL

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]

在这个特定的示例中,twenty2talk 将被重写为不带连字符的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 文件。

【讨论】:

    【解决方案2】:

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

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

    我不确定这就是你想要达到的目标......

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

    【讨论】:

    • 我在 www.foobar.com/index.php?page=twenty-2-talk&name=Joe Bloggs&position=Director&company=Blah Ltd&telephone=012243&email=test@test.com 之后成为 www.foobar.com /二十二谈话。考虑到 $_GET vars 数据会随着每个发送的电子邮件链接而改变。
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2014-06-11
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多