我已经配置了一个通用的重写规则来将所有请求转发到index.php的不存在的路径:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?__s=$1 [L,QSA]
现在我有不同的行为 debian 8(jessie)与 fedora 24(二十四)相比
以下设置:
如果我拨打以下网址:http://myserver.local/example/test
debian和fedora的行为不一样。
在debian上,apache说“ok,在示例文件夹中找不到文件测试或文件夹测试”转发到index.php(预期行为)。
在fedora上,apache说“哦,我找到了一个名为test.php的文件,不要转发到index.php。所以我将test.php发送给我的客户端。” 如果我删除或重命名test.php,它会按预期转发到index.php。
是否有人能够解释为什么同样的.htaccess以不同的方式在debian和fedora上进行交互?
答案 0 :(得分:1)
是否有人能够解释为什么同样的.htaccess以不同的方式在debian和fedora上进行交互?
这很可能是由于Fedora主机上处于启用状态的MultiViews
选项。
只需将此行放在.htaccess的顶部即可将其禁用:
Options -MultiViews
Apache's content negotiation module
由mod_rewrite
在 /test
之前运行并使Apache服务器匹配文件扩展名。因此,如果/test.php
是网址,那么Apache将提供匹配的template <typename F>
void common(F f)
{
foo();
bar();
f();
foobar();
}
void MyFunction()
{
common([](){});
}
void MyFunctionWithABonus()
{
common(&doBonusStuff);
}
。