我正在尝试根据引用来限制使用mod_rewrite访问网页。
网页的网址是
http://www.example.com/path/to/page.php
它位于/var/www/path/to/page.php
中的Debian服务器上
我有一个重写地图allowedReferers
,其中包含一个网址列表
allowedReferers
我还有以下重写条件/规则
重写
Cond %{HTTP_REFERER} ^(.*)$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* http://www.someotherplace.com [R,L]
到目前为止,这非常有效。
可以访问网站,而
被重定向到someotherplace.com。
我的问题是,在现实生活中,我的引用将包含GET参数。 e.g。
我的想法是将第一个条件重写为类似的东西
RewriteCond %{HTTP_REFERER} ^(.*)\?.*$
或者
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
我在Firefox的RegexTester中测试了两个正则表达式,它们的行为与我想要的一样。 应用于以下输入
他们为$1
返回此内容:
我希望%1
还包含减去GET参数的URL。
所以,保持规则的其余部分不变:
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* http://www.someotherplace.com [R,L]
应该导致预期的行为:
可以访问网站,而
(或http://www.athirdplace.com/等)
将被重定向到someotherplace.com
不幸的是,它根本没有表现出预期的行为。 将更改应用于第一个条件后,每个引用者都可以访问该网站。
由于我想看看%1
内部究竟是什么,我提出了以下想法:
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* %1 [R,L]
假设从
引用该页面会将我重定向到
错误的假设。它将我重定向到
正如我在开头所提到的那样,访问将被限制的页面的地址。
当然会引发404,因为/var/www/
是docroot。
重定向到%1
只是一个绝望的尝试来调试我的问题,所以我不需要一个解决方案来实现这一目标。我正在寻找的是一种解决我原来的重定向问题的方法。
像这样的参考者
(无论传递哪个ID)
转到
而其他一切都是
最后,我还要了解如何调试mod_rewrite
的任何想法,特别是查看%{HTTP_REFERER}
,%1
,$1
等内容的方法。
答案 0 :(得分:0)
刚刚找到一个解决方案如何(至少部分地)调试mod_rewrite:
http://www.latenightpc.com/blog/archives/2007/09/05/a-couple-ways-to-debug-mod_rewrite
提供了一个非常方便的技巧来输出mod_rewrite正在使用的一些值。 我稍微修改了一下这个例子:
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
RewriteRule (.*) /path/to/mod_rewrite_debugger.php?referer=%{HTTP_REFERER}&p1=%1 [R=301,L,QSA]
mod_rewrite_debugger.php只包含
echo "<pre>"; print_r($_GET); echo "</pre>"
输出结果为:
[referer] => http://vfh143.beuth-hochschule.de/tests/moodle3.php?id=3
[p1] => http://vfh143.beuth-hochschule.de/tests/moodle3.php
这表明我原来的假设是正确的。
不幸的是,当应用第二个条件时,调试器不再起作用了:
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule (.*) /path/to/mod_rewrite_debugger.php?referer=%{HTTP_REFERER}&p1=%1 [R=301,L,QSA]
产生以下输出:
[referer] => http://vfh143.beuth-hochschule.de/tests/moodle3.php?id=3
[p1] =>
事实证明,这些规则突然按原计划运作。问题解决了。
也许这有助于某人。