htaccess 文件存在检查在与 apache 别名一起使用时似乎不起作用



我已经使用.htaccess文件15年了,所以我对它们有相当的信心。但是今天我发现"文件存在"检查似乎无法与 Apache 的别名命令正常工作 - 我不知道为什么不(我已经多次阅读了文档,找不到任何可以具体解释这一点的东西(。

例如,这个简单的 HTTP conf

Alias /site             /sites/site1.com

例如,使用这个简单的htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /site/
# this never matches: (despite being used in most examples all over the web)
RewriteCond %{DOCUMENT_ROOT}/$1.extension -f
# this doesn't match either: RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*)$ FailOnPurpose [NC]
</IfModule>

。从不触发。这里的意图是:

  1. 当请求进来时...
  2. 。检查是否有具有该名称和扩展名"扩展名">
  3. 的文件
  4. 。如果是:重写

例如,如果我要求:

http://example.com/site/a.png

还有一个文件:

/sites/site.com/a.png.extension

然后我希望重写Cond可以工作。

如果我从 apache 中删除所有别名,并使用普通的直接子文件夹,那么它可以工作。

您不能在别名目录的上下文中使用DOCUMENT_ROOT因为DOCUMENT_ROOT将指向别名路径之外的路径,并且您的条件将始终失败。

您可以使用此规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.extension -f
RewriteRule (.*) FailOnPurpose [L,QSA]

我已经在我的本地 Apache 2.4 上以别名 .htaccess 对其进行了测试

最新更新