从RewriteRule中排除一些文件夹

时间:2015-08-03 22:37:48

标签: php apache .htaccess mod-rewrite

我不熟悉Apache mod_rewrite并且我必须将所有请求作为GET参数传递给PHP页面(例如。index.php?_REQUEST=$),它将检查它们并根据a重定向到正确的位置。用INI文件写的设置。

重写必须排除某些目录(访问是直接的):

  • admin/
  • api/
  • bin/cmd/(但不是bin

我怎样才能在.htaccess中执行此操作?

是否可以将请求传递给环境变量($_ENV)而不是GET变量?

1 个答案:

答案 0 :(得分:1)

在文档根目录中的.htaccess文件中尝试以下操作:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule !^(admin|api|bin/cmd)/ /index.php [L]

当请求未以/index.php/admin/等开头且尚未/api/时,此会在内部重写/index.php(防止重写循环)。然后通过PHP变量$_SERVER['REQUEST_URI']访问请求。

  

RewriteCond%{REQUEST_URI}!^ admin

此行的问题(来自您的评论)是%{REQUEST_URI}始终以斜杠开头,因此永远不会匹配,因此以下RewriteRule 总是重写请求。