使用.htaccess拒绝直接请求

时间:2010-10-02 23:08:05

标签: .htaccess redirect request using

有没有办法使用.htaccess拒绝直接请求我的网站的特定部分,例如www.example.com/XXXXX

我只想让Referer只允许XXXXXX。我知道我必须以某种方式使用HTTP_REFERER来实现我的目标,但目前我正在使用其他.htaccess规则而不确定如何将所有规则组合在一起。这就是我现在在.htaccess中所拥有的

  

选项+ FollowSymlinks RewriteEngine   在RewriteCond%{REQUEST_FILENAME}!-f   RewriteRule ^([^ /] +)$   /index.php?page=$1 [QSA,L]

1 个答案:

答案 0 :(得分:0)

首先,我不确定我是否理解你的问题,但无论如何我都试一试。

目前你有:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA,L]

您还需要的是:

RewriteCond %{REQUEST_FILENAME}   -d
RewriteCond %{HTTP_REFERER} !^http://your-domain\.tld/.*$ [NC]
RewriteRule XXXXXX/(.*)$ - [F,NC,L]

.htaccess RewriteRule按照它们发生的顺序进行检查,所以你可能想做这样的事情,虽然我已经纠正,因为没有机会检查它是否有效: / p>

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA]
RewriteCond %{HTTP_REFERER} !^http://your-domain\.tld/.*$ [NC]
RewriteRule XXXXXX/(.*)$ - [F,NC,L]

也就是说,首先检查它是否是一个名为index.php的争论文件,如果不是(没有L标志),应该重写,继续下一条规则,首先抓住一个新条件,然后是规则验证,限制访问(抛出HTTP 403)。

这有意义吗? 无论如何,请尝试上面的.htaccess示例,因为正如我所说,我无法测试它。