mod_rewrite Примеры
При помощи mod_rewrite можно обрабатывать те или иные адреса. Возможности модуля достаточно велики - ведь используются регулярные выражения. Однако, “типовых” задач не так уж много. Итак… сборник “шпаргалок” по mod_rewrite для начинающих.
Перенаправление на сайт с www
# нерабочий вариант:
RewriteCond %{SERVER_NAME} !^www.*$
RewriteRule ^(.*)$ http://www.%{SERVER_NAME}/$1 [R]# рабочий вариант:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]# Перенос наоборот - переносим все что с “www” на БЕЗ “www”
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
Перенаправление http на https и наоборот (вместе не использовать!):
# с http на https
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
# с HTTPS на HTTP:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Добавляем закрывающий слэш в конце
# этот вариант почему-то перебрасывал с домена www. на домен без www
RewriteRule ^([a-zA-Z0-9/-]*[^/])$ $1/ [R=301]
#Слегка модифицировал, и редирект стал осуществляться на тот же домен:
RewriteRule ^([a-zA-Z0-9/-]*[^/])$ http://%{HTTP_HOST}/$1/ [R=301]
Редирект адресов с вопросительным знаком (всех)
при необходимости, можно добавить проверку на %{QUERY_STRING} - раскомментировать
RewriteCond %{THE_REQUEST} "\?"
# RewriteCond %{QUERY_STRING} ^$
RewriteRule .* %{REQUEST_URI}? [R=301,L]
Как склить index.php , index.html index.asp итд с главной страницей сайта (с корнем:
# при нулевой строке запроса перенаправляем ПОЛНЫЕ вхождения
RewriteCond %{REQUEST_URI} ^/(index.aspx|default.aspx|default.asp|index.asp|index.html|index.htm|index.php)$
RewriteCond %{QUERY_STRING} ^$
RewriteRule .* / [R=301,L]
# проверить на работоспособность
RewriteCond %{REQUEST_URI} ^/index\.(.+)$
RewriteRule .+ / [R=301,L]
# вариант не совсем корректный, т.к. %{THE_REQUEST}
#содержит запрос целиком: GET /index.php HTTP/1.1
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.yoursite.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} index.html
RewriteRule index.html / [R=301,L]
Убираем index.php из адресов (для ссылок с ? GET-параметрами в строке запроса) - т.е. редирект
с http://site.ru/index.php?a=1&b=2 на http://site.ru/?a=1&b=2
RewriteEngine on
RewriteCond %{THE_REQUEST} "^GET (.*)/index\.php\?"
RewriteRule .* %1/?%{QUERY_STRING} [R=301,L]
или (аналогично)
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php$ / [R=301,L]
Убираем index.php из адресов (перенаправляем со страниц вида index.php/page/3 на /page/3):
RewriteCond %{THE_REQUEST} index.php
RewriteRule ^index.php/(.*) /$1 [R=301,L]
Сделать редирект только для определённых адресов
RewriteCond %{REMOTE_ADDR} =192.168.0.1 [OR]
RewriteCond %{REMOTE_ADDR} =192.168.0.2 [OR]
#...
RewriteCond %{REMOTE_ADDR} =192.168.0.3
RewriteRule .* http://rewrite.cond.url [L,R]
Аналогично - средствами PHP
$bad_addresses = array('192.168.0.1','192.168.0.2');
if (in_array($_SERVER['REMOTE_ADDR'],$bad_addresses)) {
header('Location:rewrite.url');
exit();
}
Редирект адресов с пробелами
Для перенаправления адресов с пробелами следует использовать обратный слэш для экранирования
RewriteRule url\ with\ space /new_url [R=301,L]
Как реализовать данную задачу?
Написать правило роутинга таким образом, что бы все запросы приходящие на веб-сервер отдавались на файл index.php. Исключения является только медиа-файлы (*.jpg, *.png, *.gif, *.js, *.css, …), они отдаются непосредственно.
Это элементарно, альтер! Смотри любой хтассецц для цмсок
автару спасибо, нашел как индекс склеить чтобы дублей не было
Спасибо за реврайт на страницу со слэшом или слэшем.. как правильно не знаю. В общем product -> product/ - полдня бился, не смог найти.
Здрасти
Помогите мне пожалуйста как сделать на это например что бы когда любой адрес который начинался бы вот так
> component/muscol/?view
Вот полный адреса примера такиз адресов много только номера ID разные
http://examle.com/component/muscol/?view
Именно адреса в в которых есть ?view и которые после ?view не открывались
Как бы сделать 303 на главную или 404 не получаться, во всяком случае у меня
#—
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
#—
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
#—
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#—
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
#—
RewriteCond %{HTTP:CF-Visitor} ‘”scheme”:”http”‘
RewriteRule ^(.*)$ https://www.domain.com/$1 [L] #не забудьте заменить домен
#—
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
#—
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{HTTP_X_FORWARDED_PROTO} http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]