从RewriteRule中排除某些文件夹


Exclude some folders from RewriteRule

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

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

  • admin/
  • api/
  • bin/cmd/(但不包括bin)

如何在。htaccess中做到这一点?

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

在文档根目录下的.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']访问请求。

rewritecsecond %{REQUEST_URI} !^admin

这一行的问题(从你的评论)是%{REQUEST_URI}总是以斜杠开始,所以这将永远不会匹配,所以下面的RewriteRule 总是重写请求。