2010-06-17 76 views
2

我有以下问题:我使用保存引用URL的脚本。我想要这个URL到我自己的URL之一。假设用户访问页面http://example.com/page1我想将该URL重写为http://example.com/page2,并确保该页面上的引用者安全。如何在rewrite规则上设置referer?

我不想用PHP脚本来做到这一点,否则每次我想跟踪一个新的引用者时,我都必须扩展该脚本。我已经尝试了这些重写规则:

RewriteRule ^page1$ /page2 [R=301,QSA,NC] 
RewriteRule ^page1$ /page2 [L,R=301,QSA,NC] 

重写工作,但请求参数引用程序丢失。我是否必须使用301以外的其他stauts代码,或者在我的重写中是否有其他错误。甚至可以在rewrite规则中设置referer?

+0

如果网址保持重定向后相同,但它时并不需要这将是很好。 – 2ndkauboy 2010-06-17 15:52:06

+0

我认为你的意思是引用标题?如果是这样,我不认为你可以mod_rewrite发出一个外部重定向到浏览器。你引用的引用是否总是说page1? – 2010-06-17 17:05:37

+0

我确实是指HTTP_REFERER。我根本没有在URL中使用page1。只有在URL中使用page2我才能得到正确的引用者。 – 2ndkauboy 2010-06-17 17:18:53

回答

1

使用R标志会导致外部重定向。如果你只是想一个内部重写,省略[R标志:

RewriteRule ^page1$ /page2 [QSA,NC] 
+0

但是,这不会设置HTTP_REFERER或我错了吗?我希望page1作为HTTP_REFERER的值出现在page2上。这甚至可以用重写规则吗? – 2ndkauboy 2010-07-01 10:08:42

+0

@ Kau-Boy:做内部重写不会改变HTTP请求。该请求只是在内部重写到另一个URI。 – Gumbo 2010-07-01 10:42:33

+0

因此,简而言之,没有一个PHP脚本在中间做一个头重定向来改变/设置HTTP_REFERER是不可能的?当我必须这样做的时候,没关系。只是想知道它是否适用于重写规则。 (如果你添加了“不适合你的答案,我会接受它) – 2ndkauboy 2010-07-01 16:10:12