【问题标题】:Using altered RewriteCond to check if file exists in multiple locations使用更改的 RewriteCond 检查文件是否存在于多个位置
【发布时间】:2011-02-25 11:35:03
【问题描述】:

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

这是我目前所拥有的:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f #这条线不工作 RewriteRule ^(.*)$ index.php?$1 [L]

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

【问题讨论】:

  • 你能发布你已经拥有的代码吗?
  • 断线是第三条,注释为“这条线不起作用”。
  • 我实际上已经意识到问题是 public/ 不在根目录中。它与 .htaccess 位于同一个目录中。有没有办法获取 .htaccess 所在的目录,所以这可以在不同的位置工作,而无需手动修改每个 .htaccess ?

标签: .htaccess mod-rewrite


【解决方案1】:

我实际上已经意识到问题是 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 更大的性能损失,因为生成的不仅仅是一个统计信息,而是一个子请求。您还应该添加 B 标志来转义您的反向引用。

【讨论】:

  • 我也有类似的问题。我正在尝试检查文件是否存在于另一个目录中。 $0 是否代表 %{REQUEST_FILENAME}?我似乎无法让这条线工作:RewriteCond directory/%{REQUEST_FILENAME}.php -f
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多