.htaccess 文件中的多个重写条件和文件夹异常

Multiple rewrite conditions and folder exception in .htaccess file

我正在处理我的网站并遇到 .htaccess 文件的一些问题。 我得到了一个主目录(在我的例子中是 public_html)和一个名为 admin 的子目录。 我试图管理的是,如果最终用户输入 URL,如 example.com/admin,他将被重定向到包含登录表单、自定义 index.php 文件的 admin 目录等等。 如果输入了other url,则需要通过一些条件来检查。 这是我的 .htaccess 文件:

对于主目录:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?menu=&op=&id= [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)/([^/]+)$ index.php?menu=&op= [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)$ index.php?menu= [QSA,L]

对于管理目录:

RewriteEngine off

现在主目录 .htaccess 文件在输入 url 后正常工作,例如:

example.com/news/article/4
example.com/news/list

示例。com/home

但如果我输入 example.com/admin,它与第三个重写规则相关联,并认为 'admin' 是一个菜单 link。

我尝试了不同的例外,但对我没有任何效果,admin 仍然与菜单而不是目录相关联。也许我的主要 .htaccess 文件有一些错误?有人可以建议我解决这个问题的正确方法吗?

您不需要 admin 目录中的任何 .htaccess。只需在 root .htaccess 中包含这些规则:

DirectorySlash On
DirectoryIndex index.php
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?menu=&op=&id= [QSA,L]

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?menu=&op= [QSA,L]

RewriteRule ^([^/]+)/?$ index.php?menu= [QSA,L]