高级Apache重写:需要防止第二个+;目录深度匹配第一个目录深度

高级Apache重写:需要防止第二个+;目录深度匹配第一个目录深度,apache,mod-rewrite,Apache,Mod Rewrite,我需要防止第二个目录深度或位置更深的字符串将第一个目录深度规则与多域支持相匹配,从而造成额外的混乱。除了这个问题,一切都很顺利。我需要先澄清一下 有问题的页面是当我的URL中有字符串“blog”(不带引号)在dir2或更深处时,尽管我只希望它与dir1匹配 目录深度的可视化 localhost/example.com/dir1/dir2/dir3/ 我有多域支持,基本上多个网站共享相同的模块(模块为blog/、forums/、messages/,等等)。每个站点的目录都与模块位于同一目录中(/d

我需要防止第二个目录深度或位置更深的字符串将第一个目录深度规则与多域支持相匹配,从而造成额外的混乱。除了这个问题,一切都很顺利。我需要先澄清一下

有问题的页面是当我的URL中有字符串“blog”(不带引号)在dir2或更深处时,尽管我只希望它与dir1匹配

目录深度的可视化

localhost/example.com/dir1/dir2/dir3/

我有多域支持,基本上多个网站共享相同的模块(模块为blog/、forums/、messages/,等等)。每个站点的目录都与模块位于同一目录中(/dir1/website1/与dir1/blog/位于同一目录中)。基本上,您可以访问重写到的集合模块(blog/、forums/、messages/),或者如果模块不匹配,则会将其重写到主索引文件

发生的事情是

管理员/模板/博客

…正在匹配

博客/

我曾尝试使用^starts with运算符,但问题是由于多域支持,我必须首先跨越两个目录

这是我当前的代码

RewriteEngine on
RewriteRule .*/admin(.+) admin$1 [QSA]
RewriteRule .*/blog(.+) blog$1 [QSA]
RewriteCond %{REQUEST_URI} !.*(admin/|blog/)
RewriteRule !\.(css|js)$ index.php
我可以删除倒数第二行的blog/条件,但是blog模块最终会重写为index.php。在过去的几个小时里,我做了一些调整,但没有取得任何成功。不幸的是,据我所知,多域支持在网上是一个不存在的问题


我知道这是一个棘手的设置,我将尝试澄清任何人的问题。

据我所知,与其在重写规则开始时进行太一般的
*
匹配,不如尝试匹配多域字符串

让我们试试这样的方法:

RewriteRule ^[^/]*/admin(.+) admin$1 [QSA]
RewriteRule ^[^/]*/blog(.+) blog$1 [QSA]

其中,
[^/]
表示任何不是“
/
”的内容,
^[^/]*/foo
表示多次从非斜杠的内容开始,直到到达斜杠,然后再到foo。因此,这应该是将“foo”检测为仅为一级目录名的有效方法,因为域名中不允许使用“
/
”。

据我所知,与其在重写规则开始时使用过于通用的
*
匹配,不如尝试匹配多域字符串

让我们试试这样的方法:

RewriteRule ^[^/]*/admin(.+) admin$1 [QSA]
RewriteRule ^[^/]*/blog(.+) blog$1 [QSA]

其中,
[^/]
表示任何不是“
/
”的内容,
^[^/]*/foo
表示多次从非斜杠的内容开始,直到到达斜杠,然后再到foo。因此,这应该是一种有效的方法,可以将“foo”检测为仅为一级目录名,因为域名中不允许使用“
/
”。

这非常有效!非常感谢!投票通过并被接受为答案。这很有效!非常感谢!投票表决并接受作为答案。