Как мне написать 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>
раздел.