Редирект с get параметрами htaccess
Редирект 301: URL с get-параметрами
Редирект через htaccess
Когда дело доходит до редиректа ссылок с get-параметрами, то многие веб-мастера обнаруживают, что стандартные правила в htaccess для них не работают:
Redirect 301 /page.php?id=1 /page/
Еще один не рабочий вариант:
RewriteRule ^page.php?id=1 /page/ [R=301,L]
Правильным решением будет использование директивы RewriteCond :
RewriteEngine On
RewriteCond %
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]
Более подробный вариант:
RewriteEngine On
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]
Если нужно сделать массовый редирект, то воспользуемся регулярным выражением, где (.*) выбирает любое значение:
RewriteCond %
RewriteRule ^(.*)$ http://mysite.com/page/? [R=301,L]
Для того, чтобы сделать переадресацию с обычного url на ссылку с get-параметрами, пишем:
RewriteCond %
RewriteRule ^(.*)$ https://mysite.com/newpage?id=1 [R=301,L]
RewriteCond %
RewriteRule /page.php$ /newpage?id=1 [L,R=301,QSA]
Редирект средствами php
Бывают ситуации, когда удобнее воспользоваться редиректом на php:
В случае, если нужно сделать переадресацию нескольких url на один адрес, воспользуемся таким кодом:
Этим способом можно делать редирект для любых ссылок, кроме кириллических.
Таким же образом можно сделать переадресацию с помощью регулярного выражения:
Если нужно исключить любые get-параметры на главной странице:
Редирект в nginx
Недавно клиенту потребовалось настроить переадресацию c кириллического адреса на обычный с get-параметрами. При этом apache на сервере не использовался. В таком случае нам поможет nginx:
location =/моя-страница <
rewrite ^ /page.php?id=1 permanent;
>
Для переадресации со страницы с get-параметрами используем следующий код:
На хостинге RU-CENTER в настоящее время используется веб-сервер Apache версии 2.4.
Директивы файла .htaccess действуют для каталога, в котором размещён такой файл, и для всех его подкаталогов. Если вы желаете с помощью .htaccess изменить настройки для сайта в целом, его следует размещать в корневом каталоге сайта
Пожалуйста, будьте внимательны при редактировании файла .htaccess! При сохранении такого файла в кодировке UTF-8 в нём не должно присутствовать BOM-сигнатуры. Для редактирования файла .htaccess и других конфигурационных файлов мы рекомендуем использовать не «Блокнот» Windows, а специальные текстовые редакторы, например Notepad++.
1. Перенаправление доменов c синонима сайта на основной домен с кодом 301
Перенаправить запросы на domain.ru с любого из синонимов сайта
RewriteEngine On
RewriteCond %
RewriteRule ^(.*)$ http://domain.ru/$1 [L,R=301]
Перенаправить запросы на www.domain.ru с любого из синонимов сайта
RewriteEngine On
RewriteCond %
RewriteRule ^(.*)$ http://www.domain.ru/$1 [L,R=301]
Эти правила рекомендуется размещать в самом начале файла .htaccess.
2. Постоянное перенаправление с кодом 301
Redirect 301 /page.html http://www.domain.ru/new_page.html
Например, для перенаправления всех запросов к странице /period/?test=123 вашего сайта на domain.ru, вы можете написать:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %
RewriteRule ^period/$ http://domain.ru/ [L,R=301]
3. Переопределение страниц ошибок
#401 Авторизация не выполнена
ErrorDocument 401 http://domain.ru/errors/401.html
#403 Доступ запрещен
ErrorDocument 403 http://domain.ru/errors/403.html
#404 Страница не найдена
ErrorDocument 404 http://domain.ru/errors/404.html
#500 Внутренняя ошибка сервера
ErrorDocument 500 http://domain.ru/errors/500.html
Соответствующие файлы страниц ошибок (401.html, 404.html и др.) необходимо разместить в каталоге
Для того чтобы при случайном упоминании прямых ссылок на такие страницы они не проиндексировались в поисковых системах, рекомендуется:
User-agent: *
Disallow: /errors
/ваш_домен/docs/errors/.htaccess, в котором прописать
4. Постраничное перенаправление запросов на другой домен c кодом 301
Следующий код перенаправит все запросы к страницам вашего сайта на аналогичные страницы другого сайта, например, запрос http://domain.ru/main будет переадресован на http://www.newdomain.ru/main:
Redirect 301 / http://www.newdomain.ru/
RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.ru/$1 [R=301,L]
5. Ограничение доступа к сайту по IP
Запретить доступ к сайту с IP-адресов 123.4.5.6 и 123.5.4.3
Order Allow,Deny
Allow from all
Deny from 123.4.5.6 123.5.4.3
Запретить доступ к сайту со всех адресов кроме 123.4.5.6 и 123.5.4.3:
Order Deny,Allow
Deny from all
Allow from 123.4.5.6 123.5.4.3
Запретить доступ к сайту для всех:
6. Переопределение главной страницы сайта (индексного файла каталога)
Сделать главной страницей файл menu.html:
8. Запрет выдачи листинга каталога
В случае отсутствия в папке главной страницы (индексного файла), при обращении без указания конкретного имени файла в запросе будет выдан список всех файлов, находящихся в каталоге. Для того чтобы запретить отображение листинга каталога, добавьте в файл .htaccess строку:
Скрипт должен иметь атрибут исполнения (+x, права доступа, начинающиеся с 7, например, 755).
10. Блокировка переходов со сторонних ресурсов
Для запрета перехода c baddomain.ru на domain.ru добавьте в .htaccess следующее:
Если требуется запретить переходы с нескольких доменов, то используйте следующие директивы
В файле .htaccess использование кириллицы не допускается. При составлении правил перенаправления для кириллических доменов необходимо указывать имя домена в punycode. Узнать имя домена в punycode можно с помощью сервиса Whois.
Например, для перенаправления site.ru на caйт.рф нужно воспользоваться следующим правилом:
RewriteEngine on
RewriteCond %
RewriteRule ^(.*)$ http://xn--80aswg.xn--p1ai/$1 [R=301,L]
В этом случае ваши посетители могут увидеть именно punycode-представление доменного имени в адресной строке браузера. Это не является ошибкой.
12. Перенаправление с HTTP на HTTPS и обратно
Для работы перенаправления на сайте должен быть установлен действительный SSL-сертификат.
Перенаправить запросы на https://domain.ru
Перенаправить запросы на http://domain.ru
3. Диагностика ошибок
Если после редактирования или размещения .htaccess при обращении к сайту вы получили ошибку 500, то, скорее всего, в файле .htaccess допущена ошибка. Посмотреть её причины вы можете в лог-файле /var/log/ваш_домен.error_log.
Как сделать редирект с htaccess c get параметрами?
Пытаюсь сделать редирект с 1 ссылки на вторую, но сайт даже не реагирует
/forum/46-24786-1
RewriteRule ^forum/([^&]+)-([^&]+)-([^&]+)$ /forum/index.php?threads/%1/%2/page-%3 [L,R=301]
46 это номер раздела
24786 номер треда
1 номер страницы
я просто хотел передать эти параметры
это не работает, редиректа не происходит
RewriteRule ^forum/([^&]+)-([^&]+)-([^&]+)$ /forum/index.php\?threads/$1/$2/page-$3 [L,R=301]
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 405 default
ErrorDocument 406 default
ErrorDocument 500 default
ErrorDocument 501 default
ErrorDocument 503 default
вот весь мой htaccess
RewriteRule ^forum/46-24786-1$ /forum/index.php?threads/46/24786/page-1 [L,R=301]
даже такой прямой без параметров не работает
СДЕЛАЛ ТАК
RedirectMatch 301 ^/forum/(\d*)-(\d*)-(\d*)$ /forum/index.php?threads/$1/$2/page-$3
[^&] скорее всего нужно было бы заменить на [^-]
так же возможно у вас есть логика в 46-24786-1
например от 0 до 99 до первого тире от нуля до 6 цифр до второго итре и третье и все это цифры.
Отладь вначале на одном редиректе с четко забитыми параметрами а потом постепенно заменяй каждую группу регуляркой
так бы выглядел редирект С гет параметра на обычный урл.
И не забудь экранировать вопрос
А проценты делаются так
Благодаря «RewriteBase /» удобнее делать преобразования URI (убирается привязка к физическому расположению файлов сайта на сервере).
Давайте рассмотрим самые распространенные примеры:
1. Простой редирект
Для простого редиректа условия задавать не обязательно, только правило.
2. Реврайт без редиректа
Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy
3. Редирект с сохранением рейтинга страницы
4. Редирект для домена с www.site.com на site.com
Убираем у всех запросов вначале «WWW.»
5. Редирект для домена с site.com на www.site.com
6. Редирект с index.php (html,htm) на главную страницу
7. Редирект с index.html на папку (удаление из строки браузера index.html)
9. Чтобы вместо page.htm загружался файл page.html
10. Переезд с одного домена на другой
11. Редирект всех файлов в папке на один файл
12. Задание типа индексной страницы (php, html, htm и другие)
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php
Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить (склеить) страницы вида https://ваш_домен/ и https://ваш_домен/index.php
14. Определение кодировки, в которой сервер «отдает» файлы
Варианты: KOI8-R, UTF-8, Windows-1251
15. Определение кодировки на загружаемые файлы
Варианты: KOI8-R, UTF-8, Windows-1251
16. Кэширование для всех типов файлов по времени доступа
17. Кэширование для всех типов файлов по времени изменения
18. Кэширование для определённых типов файлов
19. Главная страница без дублирования
20. Редирект страниц без слэша в конце URL на слеш
Чтобы предотвратить ситуацию с индексированием страниц www.site.com/about и www.site.com/about/ как разных, ставим следущий код: Со страниц без слэша будет установлен редирект на «слэшевые».
21. Принудительная постановка замыкающего слеша
Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.
22. Удалить слеш в конце
23. Удаляем «category» из URL
24. Редирект URL страницы с папки в корень сайта
Например страница лежит на сервере в site.com/category/blue.html, но надо чтобы страница работала по запросу site.com/blue.html
25. Редирект от GET параметров
Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/
26. Редирект на мобильную версию сайта
Допустим, что мобильная версия расположена на поддомене m.site.com. Будем переходить на мобильную версию только с главной страницы основного домена.
Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)
Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)
Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.
27. Редирект на мобильную версию сайта (Универсальная версия)
28. Обработка ошибок Apache
29. Сохранение (загрузка) файлов вместо открытия
30. Переадресация с www.site.com/index.php?idc=4&marea=6 на www.site.com/
31. Редирект с поддомена на основной домен второго уровня
32. Изменяем переменные php и передаём обработку другому скрипту.
33. Убираем переменные php из запроса
(вырезаем из URI всё, что находится после знака вопроса)
34. Заперт входа на сайт
Запрещаем вход на сайт Интернет Експлореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).
35. Закрываем от всех
36. Закрываем конкретный файл от всех
37. Разрешаем доступ только с одного ip
38. Запрещаем доступ с конкретных ip
39. Убираем из Урла (URL) расширение файла
php можно заменить другим расширением. Например: html, htm, shtml, asp
41. Запрещаем отображать содержимое директории, если нет индексного файла
Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.
42. Перенаправление с HTTPS на http
43. Редиректы в зависимости от времени
Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?
Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:
Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.
44. Редирект в URL с подчеркивания в дефис
45. Редирект в URL с больших символов на маленькие
46. Массовый редирект новых файлов
Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа.
old_id INT new_url VARCHAR (255)
.htaccess
Почему то на просторах рунета информация о локальной настройки веб-сервера Apache посредством конфигурационного файла .htaccess приводится как то не полно и однобоко. В основном приводятся примеры (часто не рабочие) или сухой перевод англоязычной документации.
А как же быть, если нужно настроить несколько редиректов, и совсем нет времени познавать всю мощь .htaccess? Единственный выход это брать готовые примеры, и наугад адаптировать под свои нужды. В этой статье я напишу краткое руководство по .htaccess, которое закроет большинство вопросов новичков. А также приведу ссылки на подробные инструкции. Эта статья будет дописываться по мере необходимости, начну с самого основного.
Редиректы
Редиректы осуществляются с помощью модуля mod_rewrite. Задаются правила преобразований в виде следующей конструкции:
Правила преобразования записываются в таком виде:
В качестве [СТРОКИ ДЛЯ СРАВНЕНИЯ] могут использоваться различные переменные. Ссылка на полный список Я приведу только те, которые нужны чаще всего:
% | Строка запроса (без доменного имени, и GET параметров), пример «/server/htaccess/» |
% | Доменное имя, например «max22.ru» |
% | Строка GET параметров |
[УСЛОВИЕ] также как и [ШАБЛОН] представляют собой perl совместимое регулярное выражение, с некоторыми дополнениями, позволяющими например проверить файл ли это, или существующий url.
[ФЛАГИ] Флаги пишутся в квадратных скодках через запятую: [NC,OR]. Флаги для условий:
NC | Регистронезависимая проверка |
OR | Условие сопостовляется с остальными про правилу ИЛИ |
NC | Регистронезависимая проверка |
R=301 | Будет редирект с кодом 301, можно указать другой код |
L | Это последнее правило, больше не применять правил преобразований |
Надеюсь после моего краткого ввода в теорию, вам будет проще понимать что же написано в вашем .htaccess. Привожу ссылку на очень хороший перевод про модуль mod_rewrite, там же можно найти другие хорошие переводы.
Внимание! Браузеры кешируют редиректы.
Причем обычные сочетания типа Ctrl+F5 или Ctrl+R не помагают. Я во время тестирования каждый раз открываю страницу в НОВОМ окне в режиме инкогнито. Причем старые страницы в режими инкогнито надо закрывать.
Примеры
Универсальный редирект с www на без www
Тут самое интересное, почему то везде приводятся примеры, жестко привязанные к домену сайта. Зачем?, если есть универсальное решение:
Проверяем доменное имя, если оно начинается с www, то сработает правило: «все, на http://%1/$1«. Здесь %1 это наш домен без www (взят из условия), а $1 это адрес (взят из самого правила).
Универсальный редирект с без www на www
Тут маленько сложнее. Первое условие нужно для того чтобы получить домен (%1), оно всегда истина. Второе условие проверяет, что домен начинается не с www. Ну и само правило, аналогичное предыдущему примеру
Простой редирект
Для простого редиректа условия задавать не обязательно, только правило.
Реврайт без редиректа
Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy
Редирект от GET параметров
Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/:
Поясню, первым условиям проверяем что есть get параметр action=page, вторым условием проверяем что id равно числу. Эти условия нельзя объединять, т.к. параметры могут идти и наоборот, т.е. index.php?action=page&id=15 и index.php?id=15&action=page должны быть равноценны. Но и наконец правило, там все обычно, кроме знака вопрос (?) на конце. Он нам нужен, чтобы отсечь исходные GET параметры, иначе получим /page/15/?action=page&id=15
Редирект на мобильную версию сайта
Допустим, что мобильная версия расположена на поддомене m.site.ru. Будем переходить на мобильную версию только с главной страницы основного домена.
Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)
Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)
Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.
Универсальная версия
Редирект с главной страницы
Речь идет про запрос типа site.ru (без site.ru/index.php)
Здесь оказалось не все так очевидно, я столкнулся с необъяснимым поведением.
Реврайт без редиректа (урл не меняется). Рабочий вариант:
Редирект. НЕ рабочий вариант:
Реврайт без редиректа (урл не меняется). НЕ рабочий вариант:
Редирект. Рабочий вариант: