Содержание
Что такое htaccess, редирект через htaccess и изменение адресов с mod_rewrite
Файл «.htaccess» (с точкой в начале названия файла) — это конфигурационный файл Apache. Он позволяет изменять глобальные настройки в некоторых конкретных директориях. К примеру, делать переадресацию (редиректы), отключать обработку PHP файлов. Файл «.htaccess» — это текстовый документ, который можно изменить в любом текстовом редакторе. Обычно на хостингах данный файл изначально присутствует в корневой папке сайта. Но вы можете создать несколько файлов «.htaccess» в любых подпапках. Тогда правила будут перезаписываться.
Простой редирект через .htaccess
Разберём одну из самых популярных задачу, которую возлагают на файл «.htaccess» — это переадресация посетителя сайта на другую страницу. Откройте файл .htaccess в корневом каталоге сайта и в самом начале, первой строчкой напишите:
Redirect 301 / https://mousedc. ru
301 означает, что во время перенаправления пользователя сервер выдаст код ответа 301-«Permanent Redirect», что означает, что документ перенесён на новый навсегда.
Некоторые возможные HTTP статусы:
301 — документ перемещен постоянно
302 — документ перемещен временно
303 — смотрите другой документ
403 — документ запрещён к просмотру
404 — документ не найден
410 — документ убран
Слеш «/» после 301 означает, что перенаправление будет срабатывать в любом случае, к какой бы странице или файлу не обратился пользователя. Если вместо слеша поставить адрес файла, к примеру:
Redirect 301 /folder/page1.php https://mousedc.ru
— то будет происходить переадресация только в том случае, если пользователь запросит страницу «/folder/page1.php».
Последним параметром для Redirect стоит адрес страницы, на которую будет сделано перенаправление. В примере это «https://mousedc.ru».
Редирект с регулярным выражением через .htaccess
Существует возможность сделать редирект по регулярному выражению. То есть в случае, если запрашиваемый адрес подходит под регулярное выражение, то будет происходить редирект:
RedirectMatch 301 (.*) https://mousedc.ru$1
Чтобы понять, что происходит в этом коде, рекомендуем прочитать все статьи о регулярных выражениях, начиная с Регулярные выражения в PHP. Если кратко, то образуется карман (.*), значение которого подставляется в самый конец домена, вместо $1 в строке https://mousedc.ru$. В кармане находится относительный адрес запрашиваемой страницы (то есть без домена).
Использование регулярного выражения полезно для переадресации обращения к файлам. К примеру, сделаем переадресацию при запросе jpg картинок:
RedirectMatch 301 (.*\. product/([0-9]+)/?$ product/index.php?id=$1 [L]
При таком правиле пользователь будет заходить на страницу mousedc.ru/product/5/
, а сервер будет возвращать содержание страницы mousedc.ru/product/index.php?id=5
.
В конце правила можно заметить квадратные скобки. В эти скобки [ ] ставятся флаги. Можно поставить один флаг, к примеру, [L] и несколько флагов через запятую [NC,R=301,L]. Приведём значения самых популярных из них:
- R — вызывает редирект. Можно казать после этого флага код ответа сервера, например [R=301]
- L — останавливает процесс изменения адреса. Означает, что следующие RewriteRule после этой строчки не будут выполнены
- N — перезапускает преобразование адреса заново, начиная с первого правила. Но на этот раз подставляется адрес, изменённый в процессе проделанных преобразований. Будте осторожны, чтобы не сделать бесконечный цикл
- C — если следующее после этого правило не выполняется, то преобразование будет прервано. (.*)$ http://site.ru/$1 [L,R=301]
apache — перенаправить один URL-адрес на другой URL-адрес с помощью .htaccess
спросил
Изменено
1 год, 7 месяцев назадПросмотрено
66 тысяч разПоскольку я пытаюсь перенаправить один полный URL-адрес
http://www.domain-name.com/download/?page=download
На этот URL
http://www.domain-name.com/download/show
Чтобы это работало, я добавил этот код
rewriterule http://www.domain.com/download/?page=download(.*)$ http://www.domain.com/download/show$1 [ г=301,нк]
Но это не работает, и вместо этого он говорит, что URL-адрес, который я запрашиваю, говорит «Запрещено».
Кто-нибудь может дать какое-нибудь решение для этого.
- апач
- .htaccess
1
Перенаправление одного URL-адреса на другой URL-адрес с помощью файла htaccess:
Перенаправление 301 /en/php/project.html http://www.example.org/newpage.html
RewriteRule не включает строку запроса и не включает http-хост. Кроме того, первый аргумент — это шаблон регулярного выражения. Без http-хоста вам будет соответствовать либо
download/page=download(etc)
, либоdownloadpage=download(etc)
.Вам понадобятся 2 правила. Тот, который перенаправляет уродливый URL-адрес на красивый URL-адрес. Одно правило должно переписать хороший URL-адрес на реальный рабочий URL-адрес: 9скачать/показать/?$ скачать/?page=download [QSA,END]
Второе правило использует флаг QSA, что означает, что исходная строка запроса будет добавлена к строке запроса в модуле перезаписи. Флаг END останавливает любую перезапись, так как L-флаг не делает этого в контексте . htaccess. END доступен только начиная с Apache 2.3.9 и вызовет внутреннюю ошибку сервера, если используется в более ранней версии. Обратите внимание, что вам, вероятно, придется изменить второе правило, чтобы оно указывало на реальный файл.
Документацию можно найти здесь.
Редактировать: Обратите внимание, что вы НИКОГДА не должны тестировать правила htaccess с ПОСТОЯННЫМ перенаправлением. Если вы допустите ошибку, браузер запомнит эту ошибку! Преобразовывайте временные перенаправления в постоянные перенаправления только в том случае, если все работает так, как вы ожидаете.
6
вы можете использовать это правило
Перенаправление /download/?page=download http://www.domain-name.com/download/show
Использовать
RewriteEngine
:RewriteEngine включен Перенаправление 301 http://www.domain-name.com/download/?page=download http://www.domain-name.com/download/show
0
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
apache — перенаправить определенный URL-адрес на другой URL-адрес с помощью .
htaccess
спросил
Изменено
1 год, 9 месяцев назадПросмотрено
61к разЯ хочу иметь псевдоним и перенаправить URL-адрес
tz433.tld/jobs/
на страницуtz433.tld/about-us/jobs/
.Это то, что я уже пробовал; не получилось: 9www\.tz433\.tld/jobs/$
RewriteRule (.*) http://tz433.tld/about-us/jobs.html [R=301,L]Проблема в том, что в этом корневом пути есть несколько доменов, потому что это мультисайтовая установка typo3. Так что что-то вроде «перенаправить
/jobs
на/about-us/jobs
» не работает, потому что это должно происходить только для определенного домена (tz433).Следующая конкретная вещь —
www.tz433.tld
автоматически перенаправляет наtz433.