网站的.htaccess文件包含以下命令:
RedirectMatch 404 /directory(/|$)
要使一个深子目录中的文件可访问,同时仍为目录下的所有其他文件返回404,则需要例外。可访问目录的路径是:
/directory/sub/sub/sub/sub
如果我注释掉现有的RedirectMatch,则可以访问子目录中的文件,但/ directory的所有其他内容也是如此。我已经尝试保留RedirectMatch并将一个RewriteRule放在.htaccess文件的顶部:
RewriteRule ^/directory/sub/sub/sub/sub/ - [L]
我尝试用RewriteCond和RewriteRule替换RedirectMatch:
RewriteCond %{REQUEST_URI} ^/directory/
RewriteCond %{REQUEST_URI} !^/directory/sub/sub/sub/sub/.*$
RewriteRule ^/directory/(.*)$ - [L,R=404]
到目前为止,没有任何效果。有什么指针吗?
答案 0 :(得分:1)
您可以使用否定前瞻来排除子目录,如下所示:
RedirectMatch 404 /directory(?!/sub/sub/sub/sub)
你还会注意到我已经删除了对字符串的尾部斜杠或结尾的检查。原因是:目录始终具有尾部斜杠(除非DirectorySlash
设置为off
)。此外,无需检查路径的末尾,因为您匹配directory
和子目录中的所有内容(用于排除)。