我試圖限制訪問基於引用的mod_rewrite的網頁。 該網頁的網址是 http://www.example.com/path/to/page.php 它位於Debian服務器上/var/www/path/to/page.php
我有一個包含URL的重定向基於引用使用mod_rewrite忽略GET參數
allowedReferers
列表的重寫地圖
allowedReferers
我也有以下重寫條件/規則
重寫
Cond %{HTTP_REFERER} ^(.*)$
RewriteCond ${allowedReferers:%1|black} ^black$ [NC]
RewriteRule /* http://www.someotherplace.com [R,L]
到目前爲止,這工作得很好。
可以訪問該網站,而
被重定向到someotherplace.co米
我的問題是,在現實生活中,我的引用將包含GET參數。 例如
我的想法是第一條件改寫爲這樣的事情
RewriteCond %{HTTP_REFERER} ^(.*)\?.*$
或本
RewriteCond %{HTTP_REFERER} ^(.*)\?id=[0-9]*$
我已經在Firefox測試了正則表達式」 RegexTester和他們的行爲,我希望他們。 應用於以下輸入
他們返回本作$1
:
我預計%1
還包含URL減去GET參數。 這樣,離開規則的其餘部分不變:
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/
是文檔根。
重定向到%1
只是拼命嘗試調試我的問題,所以我不需要一個解決方案來實現這一點。我正在尋找的是解決我原來的重定向問題的一種方法。 查閱情況一樣,這些
(無論哪個ID傳遞)
去
而一切去
最後我也希望任何想法如何調試mod_rewrite
,特別的方式來窺視的東西一樣%{HTTP_REFERER}
,%1
,$1
和喜歡。