Ошибка 404 в ответе url на htaccess
Сегодня хочу поднять тему создания 404 ошибки средствами apache через файл .htaccess . Я уже расказывал вам о том, как можно создать ошибку 404 на php, а так же о том как сделать 301 редирект на htacces, — пришло время рассказать о htaccess 404 ошибка. В этом уроке попробуем сделать htaccess 404 redirect таким образом, чтоб ошибка 404 была видна сразу, без 301 и 302 редиректа и без использования PHP, чтоб не нагружать его.
Коненчо эта тема мусолилась в сети не один раз и не один блогер расказывал о такой функции файла конфигурации веб сервера апаче. Я хочу описать сам механизм ответа ошибки 404 для любой страницы, точнее для определенного url или для их группы.Редирект 404 на htaccess
Это не опечатка, действительно ошибка 404 создается аналогично 301 редиректу в .htaccess но с некой оговоркой.
Предположим, что у нас на сайте есть ненужные ссылки с GET параметрами, например ваш_сайт/?more=1 и мы хотим запретить их показывать отдав ошибку 404 в ответ.
Нажмите, чтобы посмотреть код
RewriteCond %{QUERY_STRING} ^.*more=1.*
RewriteRule . - [R=404,L,NC]
Забрасываем этот код в файл htaccess в корне вашего сайта WordPress и смотрим результат:
Вот так вот, браузер получает ошибку 404 через redirect. Аналогичное сообщение получит и поисковый бот и через время выбросит этот url из своего кеша.
Если вам нужно заблокировать какую нибудь страницу WordPRess, например ваш_сайт/privet-mir/, можно написать код вот такого плана:
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]
Результат работы предсказуемый:
Я тестировал этот результат только на CMS WordPress, если у вас не получается использовать 404 редирект htaccess на другой системе управления не стоить расстраиваться, по всей видимости код для них может быть похожий. Как альтернатива попробуйте вот такой код:
RewriteCond %{REQUEST_URI} ^/indent/.*
RewriteRule ^(.*)$ [R=404]
Он не работает на вордпресс, но работает на сайтах без системы управления контентом.
Ошибка 404 htaccess
Если вы внимательно тестировали результат работы, то наверное заметили вот эту дурацкую ошибку:
Получается вместо стандартной страницы ошибки 404 в WordPress — мы видив вот это не пойми что. Ситуацию нужно исправлять, ведь любой заказчик нас заплюет слюной за вот такие htaccess 404 redirect 🙂 . И что самое главное тут он абсолютно прав, любой пользователь увидев такое чудо развернется и убежит очень и очень далеко.Как указать страницу ошибки 404 на htaccess
Для того, чтоб указать какая страница отвечает за обработку 404 ошибки мы можем написать вот такой код перед вызовом нашей ошибки:
ErrorDocument 404 http://vash_sayt/404/
Полный код будет выглядеть приблизительно вот так тогда:
Развернуть код ниже
ErrorDocument 404 http://vash_sayt/404/
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]
И тут как говорится за что боролись, на то и напоролись:
Перед ошибкой 404 мы получаем ошибку 302 и это как говорят СЕО шники очень плохо. В общем если ваш заказчик не СЕО специалист этот вариант прокатит, в альтернативном варианте надо использовать PHP для генерации ответа. Об этом я писал вот здесь: 404 c php
Если мне удастся решить проблему с htaccess 404 redirect 302 я обязательно напишу вам об этом в этой же теме. На данный момент решение проблемы не найдено. Решение есть, описал его ниже.
Аналогично можно было не придумывать каруселей и сделать 404 редирект на htaccess через 301 редирект, разницы по сути никакой, только проще и быстрее:
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule ^(.*)$ http://%{HTTP_HOST}/404/? [R=301,L]
По сути задача сделать саму ошибку 404 превратилась в банальное перенаправление на 404. Будем искать варианты.
Решение проблемы 302 перенаправления при ответе 404
Возможно мой код покажется вам громоздким, но единственный способ, который я смог придумать для того, что удалить 302 редирект перед ошибкой 404 — и выглядит это дело вот так:
ErrorDocument 404 /error.html
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]
В корне сайта создаем файл «error.html» и туда забрасываем хтмл код, который генерирует ваш сервер WordPress. Вот результаты работы:
и вот же правильная страница ошибки без редиректа 302:
Как вы поняли, проблему мы смогли решить благодаря тому, что не использовали полный путь к файлу в этой директиве ErrorDocument 404 /error.html 🙂Теоретически на этом все. Теперь вы знаете как делается ошибка 404 на htaccess.
Если вы имеете другие решения htaccess 404 redirect или перенаправление на 404 без редиректа 301 и 302 буду рад вас выслушать. Обращайтесь, пишите комментарии, жмите лайк.
Секреты настройки файла .htaccess | Stebnev Studio
1,349 просмотров всего, 2 просмотров сегодня
Оглавление
Файл .htaccess дает пользователю возможность свободно управлять web-сервером Apache и применять настройки по отношению к директориям и папкам, которые расположены на сервере.
Успешность развития и продвижения интернет-проекта во многом зависит от правильной адекватной работы сервера, на котором расположен сайт. Сейчас большинство использует Apache – в основном, из-за простоты настройки и большого количества предоставляемых возможностей. Настраивать его работу можно как в главном конфигурационном файле, так и с помощью .htaccess. Расположенные на сервере в отдельных папках, они указывают ему, как именно действовать в данном подкаталоге.
Правильная настройка htaccess дает возможность отдельно настроить редиректы на сайте, прописать внутренние изменения url, добавить авторизацию по паролю и др. О том, как это можно сделать, поговорим далее.
Как правильно настроить .htaccess и зачем это нужно
Владельцы сайтов, которые пользуются услугами виртуального хостинга, доступа к httpd.conf чаще всего не имеют. Поэтому единственным способом управления сервером для них будет настройка файла htaccess.По сути и по структуре, он напоминает httpd.conf. С одним отличием: прописанные в htaccess директивы будут действовать только на тот каталог, в котором расположен этот файл. А также на подчиненные папки и файлы. Но действовать они будут точно так же, как директивы глобального файла конфигурации. То есть, для каждого каталога можно указать отдельный файл .htaccess с нужными настройками, не меняя при этом глобальных настроек сервера и не обращаясь за помощью к хостеру.
Правило: прежде, чем начинать настройку htaccess, в обязательном порядке сделайте копию рабочего файла. Это поможет восстановить данные, если что-то пойдет не так. Неправильные изменения сделают сайт недоступным для пользователей и поисковых роботов. Поэтому очень важно иметь актуальную резервную копию файла конфигурации.
С помощью директив, прописанных в конфигурационном файле, пользователь или владелец сайта получает возможность настройки:
- ЧПУ.
- Опций PHP.
- Кэширования.
- Редиректов.
- Обработки ошибок 404.
- Перенаправления на https
- Управления доступом и пр.
Правильный файл htaccess значительно упрощает и оптимизирует работу с сайтом, дает возможность влиять на выдачу, сформированную сервером.
Прописываем htaccess правильно
Синтаксис директив файла конфигурации достаточно прост.
При написании пары команд и их опций обязательно разделяются пробелом:
Команда параметр1 параметр2 флаги
Помимо команд можно использовать вложенные структуры, необходимые для активации либо проверки доступности отдельных модулей.
Обратите внимание, что несоблюдение синтаксиса может привести к появлению ошибок сервера. Правильный htaccess должен быть написан с соблюдением следующих требований:
- Путь к файлу или директории указывается от корня сервера:
/home/mdhscyhq/public_html/ - Домен прописывается с указанием протокола:
Redirect / https://yoursupersite.ru - Название файла должно содержать «точку»:
.htaccess - Файл должен записываться в формате UNIX.
Путь от корня можно спросить у администратора сервера или посмотреть самостоятельно. Для этого достаточно запустить на сайте функцию PHP–phpinfo и посмотреть значение doc_root.
1.Настройка ЧПУ
ЧПУ, или человеко-понятный урл, положительно (хоть и незначительно) влияет на релевантность страницы сайта запросу пользователя с точки зрения поискового робота. А значит – повышает позицию выдачи в поиске. А еще более удобен для пользователя при навигации.
Сравните:
http://yoursupersite.ru/index.html?id=4
и
http://yoursupersite.ru/razrabotka-sayta/
В последнем случае сразу становится понятно, на какой странице мы находимся и какую информацию можно на ней получить.
Вот так, к примеру, из стандартного url:
tovar.html?id=101
с помощью изменений настроек ЧПУ в htaccess можно сделать вполне понятный url:
tovar-101.html.
RewriteRule ^tovar-([0-9]+)\.html$ tovar.html?id=$10
Или создать древовидную структуру url: category/tovar-123.html
RewriteRule ^category/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ tovar.html?id=$20
2.Настройка свойств PHP
Даже если хостер закрыл доступ к php.ini, но вам обязательно необходимо изменить некоторые свойства PHP, это можно сделать с помощью файла htaccess.
Пример:
<ifModule mod_php.c> php_value post_max_size 10M php_value upload_max_filesize 32M php_value max_execution_time 200 php_value default_charset utf-8 </ifModule>
Директивы:
upload_max_filesize позволяет выполнить загрузку файлов размером до 32Мб (по умолчанию – до 16Мб).
post_max_size увеличивает размер постинга до 10Мб (стандарт – 2Мб).
max_execution_time позволяет использовать сложные скрипты, на выполнение которых необходимо более чем 30 стандартных секунд.
3.Кэширование данных
В файле htaccess можно выполнить настройку кэширования, если по каким-либо причинам это невозможно организовать с помощью синтаксиса PHP. В таком случае для ускорения загрузки данных с сервера можно применить следующие модули:
- mod_headers — дает возможность устанавливать в заголовке ответа сервера разные правила кэширования для файлов различных типов.
- mod_expires — отвечает за срок «устаревания» файлов, время, по истечении которого, файл будет помещен в кэш браузера.
При схожем смысле модули имеют разный синтаксис. Допускается использование любого из них (выбор зависит от того, какой установлен на сервере).
4.Настройка редирект в htaccess
Настройка файла htaccess позволяет выполнить простую и сложную переадресацию url. То есть, вы можете перенаправить пользователя на другой адрес глобально:
Redirect / http://www.yoursupersite.ru
или при запросе отдельных страниц на сайте:
Redirect / blog http://yoursupersite.ru/blog
Правильный редирект в htaccess имеет следующий синтаксис:
Redirect [status] url_local url_redirect
Существует несколько несложных правил, которые стоит соблюдать при настройке переадресации через htaccess:
- Редиректы страниц в файле нужно располагать от более частных (вверху страницы) к глобальным. То есть сверху вниз.
- Необходимо избегать двух и более последовательных редиректов, т.к. это увеличивает время ответа и негативно оценивается поисковыми роботами.
Как правильно сделать 301 редирект в htaccess
В случае переноса сайта на новый домен или смены CMS возникает необходимость перенаправления пользователя со старых url на новые адреса. Редирект с номером ошибки 301 (Permament Redirect) сообщает роботу о том, что документы и страницы были перемещены на постоянной основе. Это позволяет сохранить позиции сайта в поисковых системах, сохранить ссылочную массу и PageRank.
Настройка 301 редиректа в htaccess может быть выполнена различными способами, в зависимости от предустановленного ПО и поставленных целей.
Самый простой вариант:
Redirect 301 /new-1/ http://yoursupersite.ru/new-2/
Недостаток этого метода состоит в том, что необходимо по отдельности перечислить все адреса, с которых и на которые будет осуществляться перенаправление. Поэтому для более сложных редиректов лучше использовать модуль mod_rewrite, который позволяет выполнить любой тип преобразования url и при этом настроить зависимость преобразования от ряда условий и факторов.
Вот так, к примеру, можно выполнить перенаправление со страниц, url которых заканчивается слешем, на страницы без слеша:
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L]
А так каждая страница старого домена перенаправляется на страницу с аналогичным url на новом домене:
RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
5.Настройка 404 ошибки в htaccess
Удалили или перенесли страницу с сайта? Пользователь, перейдя по ссылке в поисковой системе или вводя неправильный url, увидит сообщение об ошибке 404. И, скорее всего, закроет вкладку.
Чтобы этого не произошло, более правильным будет отдельно настроить редирект 404 в htaccess и перенаправить посетителя на главную страницу сайта:
ErrorDocument 404 http://www.yoursupersite.ru/
Однако это не всегда такое решение оправдано. Маркетологи рекомендуют создавать отдельную страницу «Not Found», которая будет работать на увеличение конверсии. Подробнее о дизайне страницы «Ошибка 404» можно почитать здесь. А перенаправить пользователя на нее можно с помощью следующих настроек в htaccess:
ErrorDocument 404http://www.yoursupersite.ru/404.html
Аналогичным образом можно настроить вывод сообщений об ошибках:
ErrorDocument 401 http://www.yoursupersite.ru/401.html ErrorDocument 403 http://www.yoursupersite.ru/403.html ErrorDocument 500 http://www.yoursupersite.ru/500.html
6. Настройка редиректа на https в htaccess
Использование сертификата безопасности SSL и протокола https обеспечивает более безопасное соединение и достаточно высоко ценится поисковыми системами при ранжировании. Чтобы перенаправить всех пользователей сайта на этот протокол и тем самым обеспечить надежность передачи данных, достаточно внести в файл htaccess следующие настройки:
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
7.Управление доступом
В файле htaccess с помощью специальных директив можно ограничить доступ расположенным в текущей директории файлам и папкам:
deny from all
Владелец или администратор сайта может разрешить доступ пользователям с конкретного IP-адреса. Это выполняется следующим образом
order deny,allow deny from all allow from 192.168.ХХ.Х
При необходимости, можно ограничить или даже запретить доступ к файлам и папкам каталога по IP. Выполняется это с помощью следующей директивы:
deny from 192.168.ХХ.Х
Вместо заключения
Правильная настройка htaccess обеспечит правильную работу сайта. Однако не стоит забывать о том, что он является только дополнительным конфигурационным файлом, поэтому по возможностям значительно уступает httpd.conf. Но позволяет применять более тонкие настройки к отдельным папкам, расположенным на сервере.
Файл .htaccess. Замена сообщений об ошибках, редирект, склейка зеркал
С помощью файла дополнительной конфигурации веб-сервера apache можно легко заменить стандартные сообщения об ошибках на свои собственные. Например, настроить обработку ошибки 404. Ошибка 404 говорит о том, что сервер не может найти данные, согласно запросу. Например, какая-то страница Вашего сайта была удалена или перенесена, а ссылка на нее по-прежнему стоит где-то в дебрях интернета. Если пользователь перейдет по этой ссылке, то получит ответ сервера с ошибкой 404. После чего, скорее всего, сразу закроет в кладку, даже не пытаясь найти переехавшую страницу.
Однако, если вместо стандартного сообщения об ошибке будет загружаться какая-то html страница с ссылками на главную или на карту сайта, то пользователь с большей вероятностью останется на сайте.
Можно при ошибке 404 отправить пользователя, например, на главную страницу сайта при помощи следующего кода:
ErrorDocument 404 http://www.ваш_сайт.ru/
В коде необходимо заменить http://www.ваш_сайт.ru/ на адрес Вашего сайта.
Однако, такое перенаправление не всегда удобно. Пользователь может не понять, по какой причине его выбрасывает на главную страницу сайта. Для обработки 404 ошибки лучше создать дополнительный html-файл с сообщением об этой ошибке и отправить пользователя на него:
ErrorDocument 404 http://www.ваш_сайт.ru/404.html
В данном случае это файл 404.html, находящийся в корневом каталоге сайта http://www.ваш_сайт.ru/
Оформить эту страницу Вы можете на свой вкус, но, желательно, чтобы она содержала ссылки на главную и на карту сайта.
Так же достаточно распространенными ошибками являются ошибка 401 (Требуется авторизация), 403 (пользователь не прошел аутентификацию, доступ запрещен), 500 (Внутренняя ошибка сервера, например, в синтаксисе или кодировке файла .htaccess). Их обработка происходит по тому же принципу:
ErrorDocument 401 http://www.ваш_сайт.ru/401.html
ErrorDocument 403 http://www.ваш_сайт.ru/403.html
ErrorDocument 500 http://www.ваш_сайт.ru/500.html
Редирект (от английского redirect — переадресовать) — перенаправление пользователя с одного адреса на другой. С помощью файла .htaccess возможно осуществить несколько видов редиректа:
permanent (301 — документ перемещен постоянно)
temp (302 — документ перемещен временно)
seeother (303 — смотри другой)
gone (410 — убран)
Наиболее часто используемым является редирект 301, который говорит о том, что сайт переехал навсегда. Изначально эта директива использовалась в том случае, когда сайт перемещался на новый домен, чтобы не терять pr сайта и его позиции в выдаче поисковых систем. Код такого редиректа выглядит следующим образом:
RedirectPermanent / http://новый _сайт.ru/
Файл .htaccess, содержащий эту строчку размещается на старом домене, и все пользователи, а так же поисковые роботы, со старого сайта перенаправляются на новый. Таким образом новый сайт не теряет пользователей и pr старого сайта.
Так же возможно сделать 301 редирект с конкретных страниц сайта на другие страницы. Например, если наш сайт поменял свою структуру. Нужно это, опять же, для того, чтобы не терять трафик, ведь в выдаче поисковых систем, после изменения структуры сайта, какое-то время будут ссылки на старые страницы. Так же некоторые страницы могли попасть в закладки пользователей, на эти страницы могли остаться ссылки на сайтах, так что, чтобы не отправлять пользователя лишний раз на страницу с 404 ошибкой, лучше настроить 301 редирект при изменении структуры сайта. Итак, сделать 301 редирект с одной внутренней страницы сайта на другую можно следующим образом:
Redirect 301 /старая_страница.html http://www.ваш_сайт.ru/новая_страница.html
В данном случае работает редирект 301 со страницы http://www.ваш_сайт.ru/старая_страница.html на страницу http://www.ваш_сайт.ru/новая_страница.html
Редирект 301 так же используют для переадресации страниц с префиксом www на страницы без www или наоборот. Дело в том, что для поисковых систем сайт ваш_сайт.ru — это два сайта с одинаковым содержанием, имеющие адреса: http://www.ваш_сайт.ru/ и http://ваш_сайт.ru. Такие сайты (сайты с одинаковым содержанием) называются зеркалами. И различные пользователи ставят различные ссылки на Ваш сайт. Где-то стоят ссылки на сайт с www, где-то — на сайт без www. Таким образом, часть тиц и pr уходят с одного сайта на другой. Чтобы этого не происходило, и поисковые машины считали два этих сайта одним, произвести «склейку зеркал», то есть перенаправить пользователей и поисковых роботов с сайта с префиксом www на сайт без www или наоборот. Для этого в файле .htacces надо написать:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.ваш_сайт.ru
RewriteRule (.*) http://ваш_сайт.ru/$1 [R=301,L]
либо:
RewriteEngine On
>RewriteCond %{HTTP_HOST} ^ваш_сайт.ru
RewriteRule (.*) http://www.ваш_сайт.ru/$1 [R=301,L]
В первом случае мы настроили переадресацию со всех страниц сайта с префиксом www на аналогичные страницы сайта без www. Во втором случае — наоборот.
Статья полезна? Поделитесь с друзьями:
следующая статья>>
PHP — Перенаправление htaccess 404 не работает
у меня есть .Htaccess файл для управления rewrite_rules на моем сайте. Я также установил 404 перенаправление команда для перехода посетителей на определенную страницу, если они вводят неправильный URL. Но этот редирект не работает и я получаю 500 — внутренняя ошибка сервера если посетитель запросит неверный URL. Ниже приведена часть моих кодов:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$ index.php?lang=$1&page=$2&id=$3&des=$4 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/(p[0-9]+)/?$ index.php?lang=$1&page=$2&pn=$3 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?lang=$1&page=$2 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?lang=$1&page=home [NC,QSA,L]
ErrorDocument 404 http://www.mywebsite.com/404/
Чего не хватает в моем коде, который вызывает эту проблему?
-4
Решение
Виновник, увидев все ваши .htaccess
правила это:
RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1]
Предоставление вашего образца URL http://www.domain.com/en/news/1/something/test/
когда URL не совпадает с определенными правилами, он попадает в это последнее правило перезаписи и попадает в бесконечный цикл:
applying pattern '^([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$' to uri 'en/news/1/something/test/'
...
applying pattern '^([^/]+)/([^/]+)/(p[0-9]+)/?$' to uri 'en/news/1/something/test/'
...
applying pattern '^([^/]+)/([^/]+)/?$' to uri 'en/news/1/something/test/'
...
applying pattern '^([^/]+)/?$' to uri 'en/news/1/something/test/'
...
applying pattern '^(.*)$' to uri 'en/news/1/something/test/'
...
Тогда у нас есть начало рекурсии:
applying pattern '^([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$' to uri 'en/news/1/something/test/'
...
Хотя URL, как http://www.domain.com/en/news/1/wrong
не найден, он перехватывается определенным правилом (первое правило), и мы не встречаем никакой рекурсии. Так что эта внутренняя ошибка не брошена на всех не найдено страницы, но те, которые не пойманы правилом.
Я не вижу это правильно, просто удалите это.
1
Другие решения
ты должен положить
<IfModule mod_rewrite.c>
RewriteEngine On
в начале и
</IfModule>
в конце вашего кода .htaccess
0
Попробуйте добавить это правило в начало вашего htaccess:
RewriteEngine On
RewriteRule ^404/?$ /pages/errors/404.php [L]
Тогда под этим:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://domain.com/404/ [L,R]
0
Вы можете использовать директиву EroorDocument для запрета несуществующих запросов к определенному месту назначения
Проверьте это в пустом файле .htaccess
ErrorDocument 404 /page.php
0
Посмотрите код ниже, я пишу с различным сценарием.
ErrorDocument 404 http://example.com/404/
ErrorDocument 500 http://example.com/500/
# or map them to one error document:
# ErrorDocument 404 /pages/errors/error_redirect.php
# ErrorDocument 500 /pages/errors/error_redirect.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/404/$
RewriteRule ^(.*)$ /pages/errors/404.php [L]
RewriteCond %{REQUEST_URI} ^/500/$
RewriteRule ^(.*)$ /pages/errors/500.php [L]
# or map them to one error document:
#RewriteCond %{REQUEST_URI} ^/404/$ [OR]
#RewriteCond %{REQUEST_URI} ^/500/$
#RewriteRule ^(.*)$ /pages/errors/error_redirect.php [L]
0
Кажется, ваш упомянутый URL после ErrorDocument недействителен или недоступен.
Итак, что происходит, когда он получает 404, он перенаправляет на ваш URL, и он снова получает 404.
Формирует рекурсивный цикл.
Получаю мою точку зрения. ?
Попробуйте с простой статической HTML-страницей.
Я надеюсь, что это сработает.
0
Пользовательский 404 никогда не будет работать, если вы добавите домен, как http://www.mywebsite.com/404/
(это не кодирование кармы), когда вы наберете url, это приведет к ошибке 500. Это означает, что он выполнил 404, но перенаправил пользователя на 500 ошибок из-за неправильно настроенного htaccess.
Когда ошибки появляются последовательно, 4XX известны как ошибки на стороне клиента, а 5XX известны как ошибки на стороне сервера. Для подробной информации, 2XX известен как Успех & 3XX известен как перенаправление.
Так что вот быстрая попытка (я предполагаю, что у вас есть 404 HTML-файл)
ErrorDocument 404 /404.html
вместо
ErrorDocument 404 http://www.mywebsite.com/404/
Я также проверил этот код на моей стороне, и он работал. Пожалуйста, попробуйте
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$ index.php?lang=$1&page=$2&id=$3&des=$4 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/(p[0-9]+)/?$ index.php?lang=$1&page=$2&pn=$3 [NC,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?lang=$1&page=$2 [NC,QSA,L]
ErrorDocument 404 /404.html
0
Попробуй это:
ErrorDocument 404 /404/
-1
.htaccess — Как сделать 301-ый редирект для адреса, содержащего точку, на страницу с ошибкой 404?
Stack Overflow на русскомLoading…
- 0
- +0
- Тур Начните с этой страницы, чтобы быстро ознакомиться с сайтом
- Справка Подробные ответы на любые возможные вопросы
- Мета Обсудить принципы работы и политику сайта
- О нас Узнать больше о компании Stack Overflow
- Бизнес Узнать больше о поиске разработчиков или рекламе на сайте
- Войти
Как настроить редирект несуществующих страниц на страницу error.php в файле .htaccess?
Вот весь .htaccess# Может быть закомментировано, если вызывает ошибку сервера. Смотрите примечания выше.
Options +FollowSymLinks
# Добавляем Cache-Control в заголовок
Header set Connection keep-alive
Header unset ETag
FileETag None
Header set Cache-Control «max-age=2592000, public»
Header set Cache-Control «max-age=604800, public»
Header set Cache-Control «max-age=216000, private»
Header set Cache-Control «max-age=216000, public, must-revalidate»
Header set Cache-Control «max-age=1, private, must-revalidate»
# Сжимаем файлы с помощью модуля gzip
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
# Кешируем файлы у клиента
ExpiresActive On
ExpiresDefault «access plus 1 seconds»
ExpiresByType text/html «access plus 1 seconds»
ExpiresByType image/gif «access plus 2592000 seconds»
ExpiresByType image/jpeg «access plus 2592000 seconds»
ExpiresByType image/png «access plus 2592000 seconds»
ExpiresByType text/css «access plus 604800 seconds»
ExpiresByType text/javascript «access plus 216000 seconds»
ExpiresByType application/x-javascript «access plus 216000 seconds»
# Включение mod_rewrite
RewriteEngine On
# Редирект с www
RewriteCond %{HTTP_HOST} ^www.livion.ru
RewriteRule (.*) https://livion.ru/$1 [R=301,L]
# Вывод sitemap по кратким урл
RewriteCond %{REQUEST_URI} ^(/sitemap.xml)$
RewriteRule (.*) index.php?option=com_xmap&view=xml&tmpl=component&id=1 [L]
RewriteCond %{REQUEST_URI} ^(/sitemap.html)$
RewriteRule (.*) index.php?option=com_xmap&sitemap=1 [L]
# 404 ошибка
# Пример редиректа
Redirect 301 /srochnyj-notarialnyj-perevod-pasporta https://livion.ru/error
Redirect 301 /sample-data-articles/joomla/extensions/components/administrator-components https://livion.ru/error
########## Начало — Правила обработки запросов для блокировки распространенных эксплоитов
## Если у вас возникли проблемы с вашим сайтом, используйте ниже описанные операции
## Они пытаются заблокировать самые распространенные эксплоиты Joomla!
#
## Код запрета доступа к xml-файлам расширений (раскомментируйте для активации)
#
#Order allow,deny
#Deny from all
#Satisfy all
#
## Конец кода запрета доступа к xml-файлам
# Блокировать любой запрос, пытающийся установить значение mosConfig через URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Блокировать любой запрос, пытающийся испортить base64_encode через URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Блокировать любой запрос, содержащий тег