我有一个用于 example.com 网站的 example.com.conf 和 .htaccess。
当我将以下内容放入 .htacess 文件中时
RewriteEngine 开启 # 如果目录或文件存在,则直接使用 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 否则转发至 index.php 重写规则.index.php
它有效。同样的规则在 example.com.conf 中的 VirtualHost 中不起作用,该 VirtualHost 使用 apache 中的 sites-enabled 启动?使用 example.com.conf 时会抛出“错误请求”错误
这究竟是什么原因,为何会受到区别对待?
答案1
文件基本上是在与该位置的部分htaccess
相同的上下文中配置指令的另一种方式。<Directory>
这对您不起作用的原因是mod_rewrite
配置对上下文很敏感 - 您在那里所拥有的内容需要进行一些调整才能在<VirtualHost>
上下文中而不是.htaccess
或<Directory>
上下文中工作。
要停止失败,您只需从 切换RewriteRule . index.php
到RewriteRule . /index.php
- 但上下文更改也会破坏您对 的使用%{REQUEST_FILENAME}
,因为它要求请求已经映射到文件系统位置。所以我建议只需将规则放在 中的块内<Directory>
即可<VirtualHost>
。