代码之家  ›  专栏  ›  技术社区  ›  futuraprime

使用更改的rewritesecond检查文件是否存在于多个位置

  •  3
  • futuraprime  · 技术社区  · 14 年前

    我想使用mod rewrite在两个不同的位置检查文件:在请求的URL和在“public”目录中的请求的URL。

    以下是我目前为止的情况:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f  #this line isn't working
    RewriteRule ^(.*)$ index.php?$1 [L]
    

    它可以正确地确定文件是否存在,但不能正确地确定文件是否位于/public/supplied/file/path/file.extension。我该如何测试?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Artefacto    14 年前

    我实际上意识到问题在于public/不在根目录中。它在.htaccess所在的目录中。有没有一种方法可以获取.htaccess所在的目录,这样就可以在不同的位置工作,而不需要手动修改每个目录的.htaccess?

    你可以做一个子请求。这个 -F 标志将相对路径视为相对于.htaccess所在目录的路径。所以:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond public/$0 !-F
    RewriteRule ^(.*)$ index.php?$1 [L,B]
    

    请注意 -F 意味着比 -f ,因为不只是一个stat,而是生成一个子请求。您还应该添加 B 标志以退出引用。