[APACHE] Редиректы блин

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

[APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 8:35:01

В общем есть такой файлик .htaccess, валяется в корне сайта

Код: Выделить всё

## ---------------------------------------------
## Описание: Файл настроек движка на ModRewrite
## Автор   : zg, 2008 год
## ---------------------------------------------

ErrorDocument 404 /error404.php

RewriteEngine On
Options +FollowSymlinks

## Текущее расположение данного файла относительно корня сайта
RewriteBase /

## Совместимость со старыми разделами
## Для работы требуется mod_alias
# ---------------------------------------------
# Статьи
RedirectMatch permanent ^/articles/vm-server/?(.*)$			/articles/os/vm/vm-server/$1
RedirectMatch permanent ^/articles/ImageCounter/?(.*)$		/articles/php/image-counter/$1
RedirectMatch permanent ^/articles/ImageList/?(.*)$			/articles/js/image-list/$1
RedirectMatch permanent ^/articles/locales/?(.*)$			/articles/php/locales/$1
RedirectMatch permanent ^/articles/mysql-charsets/?(.*)$	/articles/mysql/mysql-charsets/$1
RedirectMatch permanent ^/articles/php-common/?(.*)$		/articles/php/php-common/$1
RedirectMatch permanent ^/articles/php-net-mask/?(.*)$		/articles/php/php-net-mask/$1
RedirectMatch permanent ^/articles/php-sendmail/?(.*)$		/articles/php-sendmail-with-files/$1
RedirectMatch permanent ^/articles/sql-parser/?(.*)$		/articles/php/sql-parser/$1
RedirectMatch permanent ^/articles/xslt-first-step/?(.*)$	/articles/xml/xslt-first-step/$1
# ---------------------------------------------

## Запросы, которые идут к разделам и файлам php, направляем на индекс
RewriteCond %{REQUEST_URI} \.php$   [OR] 
RewriteCond %{REQUEST_URI} /$       [OR]
RewriteCond %{REQUEST_URI} /[^\.]+$
RewriteRule ^(.*)$ index.php?q=$1&%{QUERY_STRING} [L]
Суть сего файла сводится к следующему:
1. если был запрос на старый раздел, то отфутболить его по новому адресу
2. все остальные запросы к разделам и файлам пхп отправлять на точку входа в движок

Проблема собственно в том, что на моем домашнем сервере пашет на ура, а на хостинге делает ненужную обработку.

Домашний пример

Код: Выделить всё

zg# telnet 192.168.1.4 80
Trying 192.168.1.4...
Connected to 192.168.1.4.
Escape character is '^]'.
GET /articles/vm-server/ HTTP/1.1
Host: anton-pribora

HTTP/1.1 301 Moved Permanently
Date: Fri, 03 Apr 2009 05:28:16 GMT
Server: Apache/1.3.27 (Win32) PHP/5.2.8
Location: http://anton-pribora/articles/os/vm/vm-server/
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Реальный хостинг

Код: Выделить всё

%telnet anton-pribora.ru 80
Trying 195.208.0.16...
Connected to anton-pribora.ru.
Escape character is '^]'.
GET /articles/vm-server HTTP/1.1
Host: anton-pribora.ru

HTTP/1.1 301 Moved Permanently
Date: Fri, 03 Apr 2009 05:24:19 GMT
Server: Apache/1.3.37 (Unix) mod_gzip/1.3.26.1a PHP/5.2.8
Location: http://anton-pribora.ru/articles/os/vm/vm-server/?q=articles/vm-server
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
на реальном хостинге подставляется ещё и параметр q, которого по идее быть не должно. Такое может быть только в том случае, если после редиректа адрес прошёл обработку через RewriteRule, а по хорошему редирект должен срабатывать сразу.

Вопрос в том как заставить апач делать редирект сразу, без последующей обработки реврайтом? (Как в первом варианте на локальном сервере)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение LMik » 2009-04-03 8:54:26

По поводу ключиков реврайта посмотри, там есть какие то типа прервать дальнейшую обработку.

'last|L' (last rule)
Stop the rewriting process here and don't apply any more rewriting rules. This corresponds to the Perl last command or the break command from the C language. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 9:13:15

LMik писал(а):По поводу ключиков реврайта посмотри, там есть какие то типа прервать дальнейшую обработку.
проблема в том, что до реврайта дело доходить и не должно. Если реврайт вырубить, то редиректы работают нормально -( А вот вместе работать они почему-то не умеют.

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение LMik » 2009-04-03 9:19:21

Апачи разных версий.

Редирект делается не реврайт модулем, а алиасом. Надо доку почитать че изменилось :/

Можно переписать редиректы на реврайт.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 9:34:27

LMik писал(а):Можно переписать редиректы на реврайт.
уже подумывал над этим, но RedirectMatch мне больше нравится. Раньше собственно и было на реврайте, просто решил сделать более изящно.
LMik писал(а):Апачи разных версий.
гм... разных, ладна, щас подниму 1.3.37 на локальном серваке.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 9:52:07

:cry:

Код: Выделить всё

zg# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /articles/vm-server/ HTTP/1.1
Host: test

HTTP/1.1 301 Moved Permanently
Date: Fri, 03 Apr 2009 05:06:51 GMT
Server: Apache/1.3.39 (Unix)
Location: http://test/articles/os/vm/vm-server/?q=articles/vm-server/
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
походу и правда чего-то сломали :(

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение ProFTP » 2009-04-03 11:47:34

это CMS? движок никто не трогал? там модреврайт с пхп стоит?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 12:00:02

засада однако с этим mod_rewrite

Код: Выделить всё

zg# cat docs/.htaccess
RewriteEngine On
RewriteRule index\.php$   index1.html [L,NS]
RewriteRule index1\.html$ index2.html [L,NS]
RewriteRule index2\.html$ index3.html [L,NS]
каждое правило последнее, каждое правило запрещено использовать в подзапросах.
Создаём индексы

Код: Выделить всё

zg# echo 1 > docs/index1.html
zg# echo 11 > docs/index2.html
zg# echo 111 > docs/index3.html
zg# truncate -s 0 rewrite.log error.log
ну и проверяем, что получилось

Код: Выделить всё

zg# fetch http://test/index.php
index.php                                     100% of    4  B 2973  Bps
zg# cat index.php
111
zg#
а получилась, мягко говоря, хренатень. Если флаги убрать, то результат будет таким же, из чего я сделал вывод, что мод_реврайт чихать хотел на них... :-o

У кого какие мысли? Может всё-таки это я что-то не так делаю?

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение ProFTP » 2009-04-03 12:42:55

а почему оаставить нормально нельзя?

там гемороя много вообще-то, там как-то модно сделать по-моиму без мод_реврайта, во многих фремворках ЮРЛ красивая site.com/df/df/df/df
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 12:55:54

ProFTP писал(а):а почему оаставить нормально нельзя?
первое правило сайтописателя - никогда не оставляй битых ссылок. У меня сайт щас ширится, поэтому нужно продумать механизм обратной совместимости ссылок. Пока сделал на поганом реврайте

Код: Выделить всё

# Статьи
RewriteRule ^articles/vm-server/?(.*)$			/articles/os/vm/vm-server/$1 [R=301,L]
...
ProFTP писал(а):там как-то модно сделать по-моиму без мод_реврайта
на апаче только через 404 ошибку и мод_реврайт можно нормальные ссылки сделать.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение ProFTP » 2009-04-03 13:52:19

а сайт не динамический? допустим если данных в СУБД нету, то вывести что-то другое.... разве там будет битая ссылка?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-03 13:57:41

ProFTP писал(а):допустим если данных в СУБД нету, то вывести что-то другое
движок не привязан к субд
ProFTP писал(а):разве там будет битая ссылка?
там не только разделы и таксты, там ещё картинки и файлы. Можно конечно и их отдавать через скрипт, но смысла в этом мало. Лучше урл подправить и сделать редирект.

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение kmb » 2009-04-06 18:19:32

вообщем-то тоже редиректы и апач, поэтому спрошу в этой теме:
internet - forward port(proxy) - www(apache)
На последнем нужно увидеть реальный ip, а не ip прокси... Голову сломал уже, раньше как-то делал, то ли через модуль realip или еще какой-то, сейчас не получается, а срочно надо =/
truth is out there...

kmb
лейтенант
Сообщения: 680
Зарегистрирован: 2007-02-20 8:30:03
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение kmb » 2009-04-06 19:54:03

nginx+realip помогли
truth is out there...

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: [APACHE] Редиректы блин

Непрочитанное сообщение Dmitriy_K » 2009-04-18 21:45:34

Может кто подскажет почему не срабатывает простой редирект на другую директорию?
Нужно перекинуть запрос файла с некоего урл: domen/common/
где domen - директория сайта
на common.www4you.ru/htdocs/

DocumentRoot "/home/domen/htdocs"
/home/domen/htdocs/ru - директория индексного файла
/home/common.www4you.ru/htdocs/ - где нужно брать файлы при запросе: domen/common/

Код: Выделить всё

RewriteEngine   on
RewriteCond %{REQUEST_URI} ^(/|/index.php)$ [NC]
RewriteRule ^(.*)$ /ru/$1
RewriteRule ^(common/)$ (home/common.www4you.ru/htdocs/)
Почему-то не срабатывает...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-18 21:52:27

Dmitriy_K писал(а):RewriteRule ^(common/)$ (home/common.www4you.ru/htdocs/)
так нельзя насколько я знаю. Можешь включить логи проследить как происходит обработка.
Dmitriy_K писал(а): где нужно брать файлы при запросе: domen/common/
для этого лучше алиас используй

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: [APACHE] Редиректы блин

Непрочитанное сообщение Dmitriy_K » 2009-04-19 9:28:15

Посмотрел ошибки сайта в Apache. В случае использования "Rewrite" выдаётся:

Код: Выделить всё

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /home/domen/common/htdocs/css/style.css, referer: http://*****
В случае использования "Alias" выдаётся:

Код: Выделить всё

client denied by server configuration: /home/domen/common/htdocs/css/style.css, referer: http://*****
Пока не разобрался как с этим бороться. Например, включение "Options FollowSymLinks" для первого варианта не помогло.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-19 9:34:09

Dmitriy_K писал(а):client denied by server configuration
смотри в сторону прав и .htaccess в целевой папке
Dmitriy_K писал(а):Options FollowSymLinks
Там перед "реврай он" поставь

Код: Выделить всё

Options +FollowSymLinks
и проверь права на папку, потом смотри опять какая ошибка лезет

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: [APACHE] Редиректы блин

Непрочитанное сообщение Dmitriy_K » 2009-04-19 19:18:42

zg писал(а):Там перед "реврай он" поставь

Код: Выделить всё

Options +FollowSymLinks
и проверь права на папку, потом смотри опять какая ошибка лезет
Это не помогло, но сделал логирование "Rewrite" и увидел, что изменение путей через него возможно только в пределах корневой папки сайта. А мне нужно как-то перепрыгнуть за её пределы, чтобы загрузить графику.
Надо придумать какое-то регулярное выражение вместо прямого указания типа:

Код: Выделить всё

RewriteRule ^/common(.*)    /home/common/htdocs$1 [R=301]
В папке "/home" куча сайтов, и всем нужен этот редирект. :(

С "Alias" пока не проходит, поскольку у него тоже определяется зона действия <Directory "/*****">, и я не знаю как в неё вписаться. Пока идут ошибки конфига: "Alias not allowed here"

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-04-19 19:54:32

Dmitriy_K писал(а):С "Alias" пока не проходит, поскольку у него тоже определяется зона действия <Directory "/*****">
дак определи -)

Код: Выделить всё

    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

Код: Выделить всё

Alias /common    /home/common/htdocs
<Directory /home/common/htdocs>
Allow form all
</Directory>

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: [APACHE] Редиректы блин

Непрочитанное сообщение Dmitriy_K » 2009-04-19 21:18:44

Прямо не помогло, но спасибо, кое-что понял. Использовал:

Код: Выделить всё

<DirectoryMatch> ^/usr/home/*>
Allow from all
</DirectoryMatch>
"Alias" почему-то упорно не проходит. Попробовал варианты типа:

Код: Выделить всё

RewriteRule ^/common(.*)    /usr/home/rbk/common.igopen.www4you.ru/htdocs$ [R=301,S=2]
Близко к попаданию, но почему-то пока срабатывает два раза последовательно (две одинаковых записи в урл). Что-то не так в синтаксисе. Я не разобрался с использованием там "$". Пока получаю "File does not exist:".

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: [APACHE] Редиректы блин

Непрочитанное сообщение Dmitriy_K » 2009-04-20 21:38:51

Пока получился рабочий вариант с "Alias":

Код: Выделить всё

Alias /common /home/domen/common/htdocs
# И обязательно разрешения переходов по рабочим каталогам:
<DirectoryMatch> ^/home/domen/*>
Options SymLinksifOwnerMatch
Allow from all
</DirectoryMatch>
Но ещё не понял почему не проходят варианты, которые в литературе по Apache представлены как равнозначные этому:

Код: Выделить всё

Alias ^/common(.*)    /usr/home/rbk/common.igopen.www4you.ru/htdocs$1
и
RewriteRule ^/common(.*)    /usr/home/rbk/common.igopen.www4you.ru/htdocs$1

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение ProFTP » 2009-05-16 15:56:57

я хотел спросить

есть CMS, какие-то статьи/разделы будут удалены, то как сделать чтобы они не были битые ссылки...

чтобы ссылки на удаленные статьи сохранились, точнее чтобы редиректило на другую определенную стаью, но тчобы ссылки сохрались как бы...

не шарю, какие тут варианты?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: [APACHE] Редиректы блин

Непрочитанное сообщение zg » 2009-05-16 15:59:55

ProFTP писал(а):не шарю, какие тут варианты?
да почти никаких, может поможет http://anton-pribora.ru/articles/www/apache/redirects/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: [APACHE] Редиректы блин

Непрочитанное сообщение ProFTP » 2009-05-16 16:06:40

не много не понял

есть

от site.com?articles=10 до site.com?articles=1000

в этом диапазоне, могут быть битые...

примерно так, но не похоже что-то

Код: Выделить всё

RewriteRule ^articles/?(.*)$  /articles/$1 [R=301,L]
куда оно будет редиректить?

тут надо движок ковырять?
или mod_rewrite справится?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение