我的功能在我的网站上名为functions.inc的文件中。如何编辑.htaccess文件以拒绝用户直接查看http://example.com/functions.inc
答案 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]
这有两件事:
在这两种情况下,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>