前任。
其中有css文件夹存放css文件,还有page文件夹存放html,php。
任何尝试通过 http 请求访问 css 文件夹的人都将被拒绝。
但页面文件夹中的任何页面都可以使用文件夹 css 中的 css 文件
换句话说,只有页面文件夹中的文件才能使用 css 文件夹中的文件
我们能这样做吗?
答案1
我不认为这能像您描述的那样,因为在服务器端您无法区分资源是单独请求的还是作为页面的一部分请求的。用户浏览器只会发出单独的 HTTP 请求,首先请求页面本身,然后请求所需的资源,例如图像、样式表等。
可以采用以下方式在服务器端内联样式表:服务器端包含或任何其他动态服务器端技术。您提到使用 PHP,因此您可以简单地在服务器端将页面放在一起并将它们作为单个响应发送,同时限制 CSS 文件夹的直接访问。
但这不会阻止人们访问您的样式表。它们只是页面的一部分,而不是单独的文件。
答案2
rewritecond %{HTTP_REFERER} !^http://www.yoursite.com/page
rewriterule ^/css - [F]
通常,对 css 文件的所有请求都带有指向使用 css 的页面的 referer。因此,如果请求带有不同于的 referer,您可以禁止访问 css 文件http://yoursite.com/page/
完整示例:
Apache vhost配置:
<virtualhost *:80>
servername t1
serversignature off
documentroot /var/www/t1
rewriteengine on
rewriteloglevel 9
rewritelog /var/log/apache2/rewrite.log
rewritecond %{HTTP_REFERER} !^http://t1/page
rewriterule ^/css - [F]
文档根目录设置:
root@pinkpony:/var/www/t1/css# ls -al /var/www/t1/{page,css}
/var/www/t1/css:
total 12
drwxr-xr-x 2 root root 4096 2011-05-22 14:07 .
drwxr-xr-x 5 root root 4096 2011-05-22 14:05 ..
-rw-r--r-- 1 root root 11 2011-05-22 14:07 x.css
/var/www/t1/page:
total 12
drwxr-xr-x 2 root root 4096 2011-05-22 14:07 .
drwxr-xr-x 5 root root 4096 2011-05-22 14:05 ..
-rw-r--r-- 1 root root 117 2011-05-22 14:07 x.html
root@pinkpony:/var/www/t1/css#
向 /css/x.css 发出直接请求,rewrite.log 片段:
192.168.1.4 - - [22/May/2011:14:11:57 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a17ec60/initial] (2) init rewrite engine with requested uri /css/x.css
192.168.1.4 - - [22/May/2011:14:11:57 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a17ec60/initial] (3) applying pattern '^/css' to uri '/css/x.css'
192.168.1.4 - - [22/May/2011:14:11:57 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a17ec60/initial] (4) RewriteCond: input='' pattern='!^http://t1/page' => matched
192.168.1.4 - - [22/May/2011:14:11:57 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a17ec60/initial] (2) forcing responsecode 403 for /css/x.css
向/page/x.html发出请求,页面内容为:
root@pinkpony:/var/www/t1/css# cat ../page/x.html
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://t1/css/x.css">
</head>
<body>
blah
</body>
</html>
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a184c90/initial] (2) init rewrite engine with requested uri /page/x.html
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a184c90/initial] (3) applying pattern '^/css' to uri '/page/x.html'
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a184c90/initial] (1) pass through /page/x.html
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a182c80/initial] (2) init rewrite engine with requested uri /css/x.css
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a182c80/initial] (3) applying pattern '^/css' to uri '/css/x.css'
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a182c80/initial] (4) RewriteCond: input='http://t1/page/x.html' pattern='!^http://t1/page' => not-matched
192.168.1.4 - - [22/May/2011:14:13:19 +0300] [t1/sid#7f4c69ceb210][rid#7f4c6a182c80/initial] (1) pass through /css/x.css
所以它可以按预期工作。但是,没有人阻止任何人使用请求发出虚假的引荐来源。我描述的技术用于杀死水蛭。