Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: 301 редирект Mod rewrite на директорию

Ищу редирект для директории и всего что в ней находится, не пойму как обработать все что внутри нее

Например вот нашел

Переадресация для разделов через RewriteRule

RewriteRule ^papka /papka-new/$1 [R=301,L]


А что если у меня урлы вот такие



И мне нужно их все переклеить на

Т.е. регистр поменять скажем, я пытался сделать так

RewriteRule ^catalog/PAPKA^(.*) /catalog/papka/$1 [R=301,L]


Но нифига, он сразу перекиывает на и все, без обработки дальнейшего адреса. Как побороть?
Ответ:
По началу не работало, но видимо браузер кешировал, сейчас с другого браузера зашел, все редиректит, спасибо прям человеческое! =)
Вопрос: URL Rewrite под IIS7

Здравствуйте.
Столкнулся с проблемой использования url rewrite.
 
Что надо сделать: чтобы при попадании на домен test.domain.ru происходил rewrite (не redirect) на адрес domain.ru/cities/test. То есть, в браузере виднеется а страницы тянутся с
 
Причем поддоменов планируется куча, в папке domain.ru/cities лежит скрипт, который определяет, какой был поддомен и что надо отдавать.
 
Оптределяется все прекрасно (тест для redirect):
 
<rule name="Add subdomains">
<match url=".*" />
<conditions>
    <add input="{HTTP_HOST}" pattern="http://([_0-9a-z-]+).domain.ru$" />
</conditions>
<action type="Redirect" url="http://domain.ru/cities/{C:1}" />
</rule>
 
Вопрос в том, как правильно написать <action type="Rewrite">:
 
1. Если я пишу <action type="Rewrite" url="/cities/{C:1}" />, то получаю ошибку 404. Логично, поскольку видимо он пытается ломиться на
 
2. Если я пишу <action type="Rewrite" url="http://domain.ru/cities/{C:1}" />, то получаю ошибку 500.50. Видимо, rewrite не позволяет переписывать весь адрес сайта.
 
А как же быть?
Ответ: Тоже вопрос по URL Rewrite:
есть IIS, на нем крутятся два сайта host.ru и old.host.ru. Движки сайтов разные.
 
1) Задача стоит, чтобы общение с посетителями шло через host.ru. Т.е. если запрашиваетс host.ru/A - выдавалось содержимое с host.ru, а если host.ru/B - то выдавалось содержимое с old.host.ru/B,но в адресной строке у посетителя виден host.ru/
 
Эта задача достаточно легко решена. Настроено глобальное правило переопределения (rewrite) и при запросе host.ru/B идет переопределение на old.host.ru/B. Все хорошо.
 
Также обращаю внимание, что установлен флаг "Остановить обработку последующих правил".
 
 
2) Но теперь есть еще одна задача, чтобы если пользователь напрямую запрашивает old.host.ru/B, то его надо сначала отправить 301-м редиректом на host.ru/B, а потом уже ему методом переопределения выдается содержимое old.host.ru/B. У пользователя же в адресной строке видно именно host.ru/B.
 
По простой логике добавляем глобальное правило перенаправления (redirect) с old.host.ru/B на host.ru/B.
 
По моему пониманию схема должна работать очень просто:  
если пользователь запрашивает host.ru/B - срабатывает правило 1), если запрашивает old.host.ru/B - срабатывает правило 2),а затем уже правило 1).
 
Но что-то пошло не так. В результате запроса к host.ru/B возникает ошибка "циклическая переадресация", т.е. выполняется сначала правило 1) затем 2), затем 1), затем 2) и т.д. Несмотря на то, что флаг "Остановить обработку последующих правил" установлен.
 
Подскажите, как можно разрешить данную ситуацию? Возможно поменять правила местами, перенести их из глобальных в локальные правила сайта и т.п. А также возможно добавить какое-то условие, которое по какой-то  серверной переменной (вот только не знаю какой) будет определять осуществляется ли запрос к old.host.ru/B с сервера в результате работы правила переопределения (и тогда редирект не должен срабатывать), либо запрос идет от пользователя (тогда должен).
 
 
Вопрос: Руководство по настройке ЧПУ (Rewrite)

В последнее время участились темы с проблемами по настройке ЧПУ (Rewrite)
Поэтому я решил написать это руководство
Для начала создайте файл .htaccess со следующим содержимым:
Код Code
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
Если не заработает то добавьте в .htaccess следующее:
Код Code
1
Options +FollowSymlinks
Теперь должно всё работать!
Ответ: Иногда появляются вопросы, как сделать перенаправление с www.site.ru на site.ru или наоборот. На самом деле, ничего сложного нет, просто надо добавить нужный код в файле .htaccess (имя начинается с точки)

Редирект с site.ru на www.site.ru:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [QSA,L,R=301]
Редирект с www.site.ru на site.ru
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [QSA,L,R=301]
Соответственно, site.ru заменяете на свой адрес

Также, иногда возникают вопросы, как "убрать" index.php из ссылки на главной странице. Это можно сделать следующим образом:
Код Code
1
2
RewriteEngine On
RewriteRule ^index\.php$ / [R=301,L,QSA]
Добавлено через 5 минут
Как вариант, для редиректа с "сайт с www" на "сайт без www", чтобы не писать имя нужного сайта, можно сделать таким образом:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [QSA,L,R=301]
И аналогичное действие для обратного:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [QSA,L,R=301]
Вопрос: Руководство по настройке ЧПУ (Rewrite)

В последнее время участились темы с проблемами по настройке ЧПУ (Rewrite)
Поэтому я решил написать это руководство
Для начала создайте файл .htaccess со следующим содержимым:
Код Code
1
2
3
4
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
Если не заработает то добавьте в .htaccess следующее:
Код Code
1
Options +FollowSymlinks
Теперь должно всё работать!
Ответ: Иногда появляются вопросы, как сделать перенаправление с www.site.ru на site.ru или наоборот. На самом деле, ничего сложного нет, просто надо добавить нужный код в файле .htaccess (имя начинается с точки)

Редирект с site.ru на www.site.ru:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [QSA,L,R=301]
Редирект с www.site.ru на site.ru
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [QSA,L,R=301]
Соответственно, site.ru заменяете на свой адрес

Также, иногда возникают вопросы, как "убрать" index.php из ссылки на главной странице. Это можно сделать следующим образом:
Код Code
1
2
RewriteEngine On
RewriteRule ^index\.php$ / [R=301,L,QSA]
Добавлено через 5 минут
Как вариант, для редиректа с "сайт с www" на "сайт без www", чтобы не писать имя нужного сайта, можно сделать таким образом:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [QSA,L,R=301]
И аналогичное действие для обратного:
Код Code
1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [QSA,L,R=301]
Вопрос: Руководство по настройке ЧПУ (Rewrite)

В последнее время участились темы с проблемами по настройке ЧПУ (Rewrite)
Поэтому я решил написать это руководство
Для начала создайте файл .htaccess со следующим содержимым:
Код
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
Если не заработает то добавьте в .htaccess следующее:
Код
Options +FollowSymlinks
Теперь должно всё работать!
Ответ: Иногда появляются вопросы, как сделать перенаправление с www.site.ru на site.ru или наоборот. На самом деле, ничего сложного нет, просто надо добавить нужный код в файле .htaccess (имя начинается с точки)

Редирект с site.ru на www.site.ru:
Код
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [L,R=301]
Редирект с www.site.ru на site.ru
Код
RewriteEngine On
RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]
Соответственно, site.ru заменяете на свой адрес

Также, иногда возникают вопросы, как "убрать" index.php из ссылки на главной странице. Это можно сделать следующим образом:
Код
RewriteEngine On
RewriteRule ^index\.php$ / [R=301,L,QSA]
Добавлено через 5 минут
Как вариант, для редиректа с "сайт с www" на "сайт без www", чтобы не писать имя нужного сайта, можно сделать таким образом:
Код
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
И аналогичное действие для обратного:
Код
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\..+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
Вопрос: 301 редирект .htaccess

Добрый день, уважаемые форумчане

Помогите, пожалуйста, разобраться в файле .htaccess. Мне нужно настроить 301 редирект, сайт на joomla. Прочитал, что после
Код PHP
1
RewriteEngine On
нужно прописать
Код PHP
1
2
RewriteCond %{HTTP_HOST} ^www.адрес_сайта\.ru$ [NC]
RewriteRule ^(.*)$ http://адрес_сайта.ru/$1 [R=301,L]
. Но в .htaccess с сайта уже есть что то подобное.
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
DirectoryIndex index.php
 
<IfModule mod_rewrite.c>
    RewriteEngine On
 
    # Determine the RewriteBase automatically and set it as environment variable.
    # If you are using Apache aliases to do mass virtual hosting or installed the
    # project in a subdirectory, the base path will be prepended to allow proper
    # resolution of the index.php file and to redirect to the correct URI. It will
    # work in environments without path prefix as well, providing a safe, one-size
    # fits all solution. But as you do not need it in this case, you can comment
    # the following 2 lines to eliminate the overhead.
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
 
    # Redirect to URI without front controller to prevent duplicate content
    # (with and without `/index.php`). Only do this redirect on the initial
    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
    # endless redirect loop (request -> rewrite to front controller ->
    # redirect -> request -> ...).
    # So in case you get a "too many redirects" error or you always get redirected
    # to the startpage because your Apache does not expose the REDIRECT_STATUS
    # environment variable, you have 2 choices:
    # - disable this feature by commenting the following 2 lines or
    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
    #   following RewriteCond (best solution)
    #RewriteCond %{ENV:REDIRECT_STATUS} ^$
    #RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
 
    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]
 
    # Rewrite all other queries to the front controller.
    RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>
 
<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the startpage to the front controller explicitly so that the website
        # and the generated links can still be used.
        RedirectMatch 302 ^/$ /index.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>
Что поменять в этом файле для настройки редиректа? И какие действия он на данный момент выполняет?
И кстати, кроме этого файла там еще лежит еще не переименованный htaccess.txt джумлы.
Заранее спасибо
Ответ: Dr_Quake, Я перерыл все темы с 301 редиректом и вижу вы очень в этом разбераетесь, помогите пожалуйста по этой же теме, вот мой топик:
Вопрос: Необходимо сделать редирект на https с использованием ЧПУ

Здравствуйте, столкнулся со следующей проблемой:
На сайте успешно используется ЧПУ, но появилась задача организовать редирект для всех страниц с http на https.
В данный момент имеются такие правила:
Код Code
1
2
3
4
5
6
7
8
9
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [QSA]
 
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
# https://www.domain.com when your cert only allows https://secure.domain.com
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ https://site.com/$1 [R=301,L]
Пробовал писать их в разном порядке, с различными флагами, но необходимого результата добиться не получилось. Работают либо только ЧПУ, либо только редирект, либо же происходит редирект, но при этом ЧПУ также редиректится в ссылку стиля site.com/index.php?php=ЧПУ
Ответ:
Сообщение от Amet13
Код Code
1
2
3
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Спасибо за ответ, но, к сожалению, это никак не помогло при решении проблемы. Результат такой же как я и описывал в стартовом сообщении. Редирект срабатывает, но ЧПУ перестаёт работать.
либо же происходит редирект, но при этом ЧПУ также редиректится в ссылку стиля site.com/index.php?php=ЧПУ
Вопрос: Редирект кроме данных в кукисах и одного урла

Суть в том, что нужно сделать так: если в кукисах нет "cookie-name" и если пользователь не обращается к страницам redirectpage.html или .*\/dontredirect\/secretpage, то происходит редирект на /redirectpage.html, В противном случае сайт работает как надо.
RewriteEngine on
RewriteCond %{HTTP_COOKIE} !^.*cookie-name.*$ [NC]
RewriteCond %{REQUEST_URI} !(redirectpage\.html|.*\/dontredirect\/secretpage)
RewriteRule ^(.*)$ /redirectpage.html [L]

Суть в том, что по задумке на /dontredirect/secretpage присваивается эта самая кука, которая избавляет от редиректа. Как это сделать? Весь мозг уже сломал, не работает нифига.
Ответ:
В настройки VirtualHost добавить
LogLevel alert rewrite:trace3

Тогда в файле error_log будет подробный лог выполнения правил mod_rewrite.
Вопрос: Rewrite rule 2 условия

Коллеги, приветствую!

С mod_rewrite редко стыкаюсь, появилась задача сделать редирект при выполнению одновременно двух условий:
1. Адрес домена равно domain.com
2. Адрес страницы не равно domain.com/f/s.php

Пытаюсь юзать
RewriteCond %{SCRIPT_URI } !^
RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule ^(.*)$ http://newdomain.com/$1 [R=301,L]

Но оно редиректит даже если адрес страницы совпадает с
подскажите пожалуйста, как лучше всего сделать.
Ответ: Вопрос и сейчас актуален.
Подскажите пожалуйста.

Собственно даже 2 вопроса:
1. Как 2 условия прописать
2. Как написать условие страницы не равно domain.com/f/s.php
Вопрос: Можно ли реализовать средствами rewrite

Добрый день, коллеги
Я раньше не занимался написаниями правил для апача, поэтому прошу отнестись с пониманием - новичок. Если, вдруг, ответ на мой вопрос из разряда rtfm, ткните носом в документацию, будьте любезны. Текущая конфигурация мне досталась исторически, придумывал это не я.
Итак: Имеются несколько веб серверов (вендорных, не апач), спрятанных за реверс-прокси (апач). Реверс-прокси имеет, соответственно, 1 "внешний" хостнейм, а надо пробрасывать запросы на внутренние сервера, основываясь на том, что после слэша. Все было неплохо, до тех пор пока внутри не появились сервера с одинаковыми сервисами, то есть с учетом одного внешнего имени в принципе невозможно отнести их к правильному внутреннему серверу по данным URL.
Соответственно, вопрос 1: Стандартная ли такая ситуация? Есть ли готовые пути ее решения? Прошу не предлагать завести разные имена хостов снаружи - это невозможно по корпоративным правилам.
Вопрос 2: Пришла в голову идея добавлять в URL искусственные префиксы, которые идентифицировали бы внутреннюю систему, например /resource1 заменить на /server1/rsource1. А реверс прокси бы "выкидывал" эти префиксы, пробрасывая на сервера URL без них. При этом он должен уметь делать это в обе стороны, так как сервер может вернуть редирект и т.п.
Реализуемо ли такое вообще для апача? Если да, то куда копать в документацию?
Большое спасибо.
Ответ: Глянь