У меня есть каталог с именем foo в корневом каталоге виртуального хоста. Я пытаюсь перехватить запросы на несуществующий файл, также называемый 'foo', и переписать их в файл PHP, файл .htaccess выглядит так:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} /foo
RewriteRule ^(.*)$ router.php [L]
</IfModule>
Все, что я получаю с сервера по GET-запросу для '/ foo', - это перенаправление 301 на '/ foo /' (каталог). Почему Apache делает это до обработки правил? Мне не хватает варианта конфигурации? Или этого нельзя делать?
Помните, что файловая система всегда имеет приоритет
Файловая система на вашем сервере всегда будет иметь приоритет перед перезаписанным URL. Например, если у вас есть каталог с именем «foo» и внутри этого каталога находится файл с именем «router.php», вы не можете перенаправить URL на «http://domain.com/foo». Случается, что Apache заходит в каталог «foo» и не видит инструкций по перезаписи.
Чтобы исправить это, просто переименуйте свой каталог (простой способ сделать это - добавить подчеркивание в начало или конец).
Редирект 301 исходит от DirectorySlash директива, которая является частью mod_dir.
Я подозреваю твой .htaccess
не работает из-за одного или обоих:
AllowOverride
настроен так, чтобы не разрешать .htaccess
файлы..htacess
файл внутри в /foo/
каталог, поэтому mod_dir применяет свое перенаправление 301 перед .htaccess
файл обрабатывается.