0

我试图使用htaccess来阻止访问我的网站,除非这些请求是指向特定的URI,但仅限于从某个子域访问时。阻止从一个子域访问除htaccess以外的一个URI

本质上,我有一些子域,我用它来解决浏览器请求限制,以加快页面的加载,并有很多图像。我已经测试过,并且这个工作正常,阻止浏览器阻止请求,直到其他人完成。

我想实现的是阻止从这些子域访问站点的其余部分,因此它们只能访问从/images开始的URI。这个想法是为了避免我的页面或子域名重复的URL在Google中被意外地编入索引。

尝试,因为我有,我不能得到它的权利,这里是我到目前为止有:

<IfModule mod_rewrite.c> 

    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Prevent access to anything but the /images URI from subdomains 
    RewriteCond %{HTTP_HOST} ^cdn[1-9]\.domain.localhost$ [NC] 
    RewriteRule !^/images.* - [R=404] 

</IfModule> 

的URI我想的子域访问:

domain.localhost /images/(products|retailers)/400/400/filename.jpg

正如你可能已经猜到了,是不是一个物理文件夹结构,它的我Laravel的PHP应用程序内的路线。

根据我的理解,底部规则应该说“如果请求来自匹配域,并且请求URI不以/images重定向到404错误开始,但因为它不起作用,我必须离得很远标志。我相信这个问题可能是由于规则的顺序,但我不能确定。

有什么建议?

+0

值得关注的是超越一切的底线规则是必需的,用于Laravel。 – AJReading

+0

'%{HTTP_HOST}'匹配当前服务器的(虚拟)主机名,而不是引用者/客户端的主机名。 – Kenney

+0

这应该没问题吧?当通过子域访问该站点时,它实际上应该是子域?%{HTTP_HOST}?或者我误解了? – AJReading

回答

1

RewriteRule指令接收在每个目录的基础上URI。因此,它的路径接收不包含前导斜杠(/)。只有在服务器或虚拟主机上下文中进行重写时才可以访问。

我建议你使用%{REQUEST_URI}变量,而不是为你排除:

RewriteCond %{HTTP_HOST} ^cdn[1-9]\.domain\.localhost$ [NC] 
RewriteCond %{REQUEST_URI} !^/images\b [NC] 
RewriteRule^- [R=404] 
相关问题