如何编辑.htaccess文件以拒绝链接到.css,.inc文件?

时间:2009-03-11 21:12:52

标签: apache

我的功能在我的网站上名为functions.inc的文件中。如何编辑.htaccess文件以拒绝用户直接查看http://example.com/functions.inc

3 个答案:

答案 0 :(得分:3)

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

如果您没有安装mod_rewrite,则非常有用。

答案 1 :(得分:2)

我使用mod_rewrite。对于图像等,这是一个标准包括:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://myhostname\.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|js|css)$ - [F]

您可以将“inc”添加到最后一条规则的扩展名列表中。

但是为了防止访问特定的文件类型,我更喜欢这样的内容:

RewriteCond %{THE_REQUEST} ^\w+\ /include/ [OR]
RewriteCond %{THE_REQUEST} \.php\ HTTP/
RewriteRule ^.*$ - [R=404,L]

这有两件事:

  1. 第一条规则禁止从外部请求访问/ include目录,但您仍然可以包含/要求它们;和
  2. 第二条规则限制访问以.php结尾的文件名。你可以对.inc文件使用相同的东西。
  3. 在这两种情况下,Apache都会出现404错误(找不到文件),我觉得这样更好。一般来说,最好不要说某些东西(你不希望别人看到),而不是说它在那里,但是你无法访问它。但那只是个人意见。

    至于为什么我限制.php文件直接访问:我使用mod_rewrite创建“漂亮”的URL。而不是:

    /account/order.php
    

    它是:

    /account/order
    

    这样做的原因有很多。美学是其中之一。 SEO是另一个(如果不是/account/order.php?item=123你有/ account / order / 123)。

答案 2 :(得分:0)

我更喜欢伪装文件而不仅仅是禁止访问它。因此,我更喜欢使用mod_rewrite解决方案来响应404状态代码(因为Apache 2.2),因为已经提到了cletus。但如果Byron提到的mod_rewrite不可用,我也会使用后备。

所以让我们结合两者:

<IfModule mod_rewrite.c>
    RewriteEngine on
    # .inc files
    RewriteRule \.inc(/|$) - [L,R=404]
    # URI paths starting with /include/
    RewriteRule ^include/ - [L,R=404]
</IfModule>
<IfModule !mod_rewrite.c>
    <Files ~ "\.inc$">
        Order allow,deny
        Deny from all
    </Files>
</IfModule>