我已经使用.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>
。从不触发。这里的意图是:
- 当请求进来时...
- 。检查是否有具有该名称和扩展名"扩展名"> 的文件
- 。如果是:重写
例如,如果我要求:
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 对其进行了测试