Назад | Перейти на главную страницу

Возможная ошибка Apache2 mod_rewrite?

У меня есть каталог с именем 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 не работает из-за одного или обоих:

  1. У тебя есть AllowOverride настроен так, чтобы не разрешать .htaccess файлы.
  2. В .htacess файл внутри в /foo/ каталог, поэтому mod_dir применяет свое перенаправление 301 перед .htaccess файл обрабатывается.