【问题标题】:htaccess: allow access only if rules are fulfilledhtaccess:仅在满足规则时才允许访问
【发布时间】:2012-09-03 16:17:40
【问题描述】:

我已经用一些重写规则完成了这个 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 文件的文件夹。这是如何发生的以及如何克服它。

【问题讨论】:

  • 您目前使用什么规则?您可以发布您的 htaccess 文件吗?
  • @JonLin 我添加了一些我正在使用的规则。

标签: apache .htaccess url-rewriting


【解决方案1】:

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

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

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

    Order allow,deny
    Deny from all
    
  • 在文档根目录的 htaccess 文件中添加额外的规则来重写您不想访问的目录:

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

    RewriteRule ^ test.php [L]
    

【讨论】:

  • 好的。我认为它只会匹配规则而忽略其他所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2018-05-17
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多