【问题标题】:Exclude a deep subdirectory from an .htaccess RedirectMatch从 .htaccess RedirectMatch 中排除深层子目录
【发布时间】:2015-06-07 23:31:13
【问题描述】:

站点的 .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]

到目前为止,还没有任何效果。有什么指点吗?

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以使用否定前瞻来排除子目录,如下所示:

     RedirectMatch 404 /directory(?!/sub/sub/sub/sub)
    

    您还会注意到我已经删除了对字符串结尾斜杠 的检查。原因是:目录总是有斜杠(除非DirectorySlash 设置为off)。此外,无需检查路径的结尾,因为您匹配 directory 和子目录中的所有内容(用于排除)。

    【讨论】:

    • 谢谢迈克!这是一个很好的答案,正是我需要的。我会投赞成票,但此帐户没有必要的 15 分。
    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2018-04-26
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多