使用htaccess防止直接流量到URL

时间:2015-06-29 15:31:32

标签: .htaccess redirect

我需要阻止直接访问网址(http://www.example.com/gated-asset)。有没有办法在htaccess文件中添加代码,将所有直接流量重定向到另一个页面(http://www.example.com/form)?

我在htaccess文件中尝试了以下代码,但所有页面(包括主页)都重定向到www.example.com/form。

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://go.example.com [NC] 
RewriteRule .* http://www.example.com/form [R,L]

整个.htaccess文件看起来像这样(它是一个WordPress网站):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://go.example.com [NC] 
RewriteRule .* http://www.example.com/form [R,L]

我也尝试了以下内容:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://go.example.com [NC]
RewriteRule ^/$ /form/ [R,L]
RewriteRule ^/$ /gated-asset/ [R,L]

以及:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://go.example.com [NC]
RewriteRule http://www.example.com/gated-asset http://www.example.com/form/ [R,L]

1 个答案:

答案 0 :(得分:0)

如果您匹配开头(http://),则需要在引荐来源检查中加入^。与HTTP_HOST不同,HTTP_REFERER需要它。此外,引荐网址可能包含REQUEST_URI,因此在域中关闭表达式会阻止其工作。

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://go.example.com [NC] 
RewriteRule .* http://www.example.com/form [R,L]

如果您不想加入http://,则可以使用以下条件:

RewriteCond %{HTTP_REFERER} !go.example.com [NC]

但是,我建议使用第一个例子。

此处还包括RL标志。如果重写是外部资源,则隐含R,但通常最好包含它。