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

Как написать RewriteRule для соответствия несуществующему файлу?

Как мне написать RewriteRule который сначала проверяет, существует ли запрошенный файл, а если нет, перенаправляет на корневую страницу:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

Например http://example.com/not_existing_file следует перенаправить на http://example.com.

Однако это не работает. Что здесь не так?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^/(.*)" "/" [L]

Ваш состояние, проверяя, что запрос не сопоставить с существующим файлом, казалось бы, правильным. Однако ваш RewriteRule не перенаправить, Это внутренне переписывает запрос вместо этого. Казалось бы, запускает цикл перезаписи (ошибка 500)?

Вместо этого попробуйте следующее:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/. / [R=302,L]

В R здесь требуется флаг, чтобы вызвать внешнее перенаправление. Это только перенаправит /<something>, скорее, чем /<anything>, как в исходном коде.

Изменить 302 (временное) перенаправление на 301 (постоянно), если вы уверены, что все работает нормально - если это требуется. Облегчает тестирование, так как в противном случае 301-е кэшируются жесткий браузером.

Это также предполагает, что это находится в конфигурации основного сервера, а не .htaccess или <Directory> раздел.