2010-10-02 105 views
0

是否有任何方式使用.htaccess拒绝直接请求我的网站的特定部分,例如www.example.com/XXXXX拒绝直接请求使用.htaccess

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

选项+的FollowSymLinks RewriteEngine叙述 上的RewriteCond%{} REQUEST_FILENAME!-f 重写规则^([^ /] +)$ /index.php?page= $ 1 [QSA,L]

回答

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的在它们发生的顺序检查,所以你可能想要做的这样的事情,虽然我纠正,因为没有机会检查它是否会工作:

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示例,因为正如我所说的,我无法测试它。