htaccess:仅在满足规则时允许访问

时间:2012-09-03 16:17:40

标签: apache .htaccess url-rewriting

我已经使用一些重写规则完成了这个htaccess文件,但问题是,我能够访问服务器上的各个.php文件以及直接访问诸如domain.com/admin/change_profile.php之类的部分< / p>

这是正常的吗?我以为这不应该发生。我如何做这个htaccess文件,这样只有满足规则才会把我带到那个文件夹?简而言之:禁止直接访问domain.com/admin/change_profile.php或domain.com/admin/或其他任何内容。

RewriteEngine on
RewriteRule ^/?(us|uk|eu)/?$ test.php [NC,L] #Country
RewriteRule ^/?(us|uk|eu)/(profile)/([a-zA-z0-9]+)/?$ test.php [NC,L] #Country - Profile

下面:

http://localhost/us -> Works
http://localhost/us/profile/companyname -> Works
http://localhost/admin -> Works too! But admin is not in the set of rules above. admin is a folder inside htdocs.

不应该有效,因为它不属于(us | uk | eu)规则的一部分。注意:它是一个包含htdocs内部php文件的文件夹。这是怎么回事以及如何克服它。

1 个答案:

答案 0 :(得分:0)

  

这是正常的吗?我认为这不应该发生。

是的,这是正常的,这是网络服务器的作用。您没有与URI /admin/change_profile.php匹配的规则,因此没有规则适用,并且Web服务器执行它应该执行的操作:提供所请求的资源。如果您不想访问某些内容,可以执行以下操作之一:

  • 从文档根目录中删除目录(或将其移出文档根目录)
  • 在您不想访问的目录中添加htaccess文件:

    Order allow,deny
    Deny from all
    
  • 添加其他规则以重写您不希望在文档根目录中的htaccess文件中访问的目录:

    RewriteRule ^/?admin test.php [NC,L]
    
  • 将所有内容路由到test.php:

    RewriteRule ^ test.php [L]