我不擅长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
总是重写请求。