Перенаправить на домашнюю страницу, если файл не найден для указанного каталога c - PullRequest
2 голосов
/ 04 февраля 2020

Я застрял на .htaccess.

Ссылка:

www.example.com/assets/images/abc.png

всякий раз, когда abc.png существует в этом каталоге /assets/images, затем просматривайте изображение в браузере. Но если я удалю abc.png изображение из этого каталога, он перенаправит страницу 404 не найдена, но я хочу перенаправить на домашнюю страницу (root url: www.example.com)

Я хочу так: всякий раз, когда файл изображения не существует для указанной папки c /assets/images. Он должен перенаправить на домашнюю страницу.

Я пробовал это, но не работает

RewriteEngine On
RewriteBase /

#If the file does not exist assets/images folder it will redirect on homepage
RewriteCond %{REQUEST_URI} !^/assets/images/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Код, который вы разместили, является внутренним переписыванием , а не "перенаправлением". Но использованное вами условие исключило подкаталог /assets/images (с использованием префикса !), поэтому оно применяется ко всем другим каталогам, кроме того, который вы хотите!

Попробуйте выполнить что-то вроде следующего вместо этого в верхней части вашего .htaccess файла:

# If an image does not exist in /assets/images then redirect to homepage
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^assets/images/[\w/-]+\.(png|jpg|gif)$ / [R=302,L]

Все сопоставление с образцом для URL выполняется в директиве RewriteRule - нет необходимости использовать отдельное условие. Поэтому проверяются только запросы, похожие на изображения.

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

Это позволяет использовать несколько подкаталогов. в пределах /assets/images. например. /assets/images/foo/bar/abc.png. Если все ваши изображения содержатся непосредственно внутри /assets/images, вы можете удалить sla sh из класса символов [\w/-].

Также предполагается, что подкаталоги и имена файлов могут состоять только из символов a-z , A-Z, 0-9, _ (подчеркивание) и - (дефис).

Обратите внимание, что это 302 (временное) перенаправление.

ОДНАКО, это перенаправление имеет смысл только если изображения запрашиваются прямо в браузере. Если они встроены в элемент HTML img, то перенаправление будет просто рассматриваться как разорванное изображение, если ваша домашняя страница на самом деле не возвращает изображение?!

0 голосов
/ 04 февраля 2020

в приложении / Исключения / Обработчик. php Файл

public function render($request, Exception $e)
    {
        if($this->isHttpException($e))
        {
            switch ($e->getStatusCode()) 
                {
                // not found
                case 404:
                return redirect()->guest('home');
                break;

                // internal error
                case '500':
                return redirect()->guest('home');
                break;

                default:
                    return $this->renderHttpException($e);
                break;
            }
        }
        else
        {
                return parent::render($request, $e);
        }
    }
...