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

проблемы с htaccess с несуществующими файлами в несуществующих каталогах

Я использую следующие .htaccess файл, который работает хорошо, однако я хочу также перенаправить любые попытки доступа к несуществующим файлам в корневом каталоге и в любом подкаталоге (независимо от того, существует подкаталог или нет) обратно к основному имени домена.

Я попытался FallbackResource но это привело к 500 ошибкам серии.

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://xxxxxxxxx.xxxxx/.*$ [NC]
RewriteRule \.(gif|jpg|jpeg|bmp|zip|rar|mp3|flv|swf|png|css|pdf)$ -     [F]

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 404 /error
ErrorDocument 401 /redirect
ErrorDocument 403 /redirect

Любая помощь будет принята с благодарностью.

FallbackResource приводит к тому, что URL-адрес внутренне переписанный в другой файл. Однако я бы подумал, что внешнее перенаправление было бы предпочтительнее в этой ситуации? Также, FallbackResource может конфликтовать с вашими существующими директивами mod_rewrite. (Однако было бы полезно увидеть, как вы используете FallbackResource на месте, так как может быть виноват ваш синтаксис?)

Попробуйте сделать что-то вроде следующего после вашей последней директивы mod_rewrite (перед вашей ErrorDocument директивы):

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

Выше сказано ... если запрос не сопоставляется с файлом и не сопоставляется с каталогом, перенаправьте его в корень документа (временный 302). В QSD требуется для удаления из запроса любой строки запроса.

В стороне: Это не рекомендуется с точки зрения SEO (или пользователей), если это вызывает беспокойство.


ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 500 /redirect
ErrorDocument 404 /error
ErrorDocument 401 /redirect
ErrorDocument 403 /redirect

(Помимо излишнего определения документа с ошибкой 500 более одного раза ...) документ указано в ErrorDocument директива должна быть относительной файловая система дорожка. например. /redirect.php (Но на самом деле это не так перенаправить не так ли?) Предположительно у вас на самом деле нет файла с именем /redirect (это потребовало бы дальнейшей перезаписи).