Войти

Показать полную графическую версию : mod_rewrite etc.


Страниц : 1 2 3 4 5 6 7 [8] 9 10

Sham
31-03-2010, 15:05
нужно уточнить насчет последнего слеша, т.к. правило (http://forum.oszone.net/post-1380724-133.html) не предусматривает его наличие, поэтому если в конце адреса будет слеш, правило не сработает... (нужно добавить туда /?)

droZel
31-03-2010, 15:49
Такс. Первая проблема решена, спасибо)
Теперь еще мелочь:
htaccess тот же
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z]+)/?$ index.php?lang=$1 [L]
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/?$ index.php?lang=$1&page=$2

site.ru/ru/ отправляется отлично
site.ru/ru/page также, как и site.ru/ru/page/
а вот site.ru/ru отправляет, но в строке тут же меняет на "http://siberiaczar/ru/?lang=ru"

С чем бы это могло быть связано?

И еще, как сделать что о вроде редиректа, чтоб /ru/page автоматически менялось на /ru/page/

total_abandon
31-03-2010, 16:06
Sham я не сказал что код нерабочий, смотри выше. я сказал что он у меня не работает и спросил о доп настройках которые могут помешать нормальной работе mod_rewrite- а, пожалуйста напишите что конкретно должно быть у меня в настройках апач, у меня стоит Lenny.

Sham
31-03-2010, 16:32
И еще, как сделать что о вроде редиректа, чтоб /ru/page автоматически менялось на /ru/page/ »
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [L]
а вот site.ru/ru отправляет, но в строке тут же меняет на "http://siberiaczar/ru/?lang=ru" »
это у вас где-то прописан редирект, в указанных правилах такое невозможно...

вообще, если например стоит nginx, то там мб свои правила прописаны, и апач тогда уже принимает измененный вариант. Т.ч. нужно смотреть комплексно, исходя из общей конфигурации...
о доп настройках которые могут помешать нормальной работе mod_rewrite »
проверено на конфиге по умолчанию... смотрите настройки хоста в httpd.conf, правила в nginx, если есть..

droZel
31-03-2010, 16:46
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [L] »
Перенаправляет, но не заменяет в строке...

Sham
31-03-2010, 16:54
оно перед всеми правилами должно стоять (внешний редирект)

droZel
31-03-2010, 16:58
оно перед всеми правилами должно стоять (внешний редирект) »
Перед какими? Там же [L] стоит? Разве это не значит, что после него ниче не станет выполняться?
Можно чуть подробнее?

Sham
31-03-2010, 17:06
Там же [L] стоит? Разве это не значит, что после него ниче не станет выполняться? »
L - это внутренний флаг правила (хотя из мануала это не ясно, но опыт показывает). Т.е. L запрещает повторную перезапись внутри правила, и переход идет на следующее (исходя из других флагов).

droZel
31-03-2010, 17:24
ну хорошо. но ведь
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [L]
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/$ index.php?lang=$1&page=$2


не подменяет в строке /ru/page на /ru/page/, а всего лишь понимает их одинаково.
я мог бы сделать
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/?$ index.php?lang=$1&page=$2

Разве это не тоже самое?
Мне нужна именно видимая подмена

Sham
31-03-2010, 17:29
http:// - внешний редирект (по сути флаг R), т.е. браузеру шлется Location и обработка кончается - это и есть видимая подмена.

droZel
31-03-2010, 17:34
Странно, у меня не подменяет, хотя без этого правила ru/page не находит(значит, правило действует как надо, но без подмены).
Проверяю в индексе явой(document.location.pathname) - так и присылает - без слеша
Где копать?

total_abandon
01-04-2010, 11:21
как только открываю сайт в логах следующее

10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98e3508/initial] (1) [perdir /var/www/] pass through /var/www/ceramica/
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98f2540/subreq] (1) [perdir /var/www/] pass through /var/www/ceramica/index.php
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98f0538/initial] (1) [perdir /var/www/] pass through /var/www/ceramica/index.css
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98e5510/initial] (2) [perdir /var/www/] rewrite 'ceramica/img/copyright_back.jpg' -> '/index.php?page=img&lang=copyright_back.jpg'
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98e5510/initial] (2) [perdir /var/www/] trying to replace prefix /var/www/ with /
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98e5510/initial] (1) [perdir /var/www/] internal redirect with /index.php [INTERNAL REDIRECT]
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98eb918/initial/redir#1] (1) [perdir /var/www/] pass through /var/www/ceramica/index.php
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98ea520/initial] (2) [perdir /var/www/] rewrite 'ceramica/swf/home.swf' -> '/index.php?page=swf&lang=home.swf'
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98ea520/initial] (2) [perdir /var/www/] trying to replace prefix /var/www/ with /
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98ea520/initial] (1) [perdir /var/www/] internal redirect with /index.php [INTERNAL REDIRECT]
10.10.0.188 - - [01/Apr/2010:16:14:46 +0500] [192.168.55.230/sid#9747bd8][rid#98f1908/initial/redir#1] (1) [perdir /var/www/] pass through /var/www/ceramica/index.php

может че нить станет ясно???

Sham
01-04-2010, 12:45
имхо RewriteBase у вас не '/', из-за этого проблемы.

Т.е. если htaccess лежит в корне, то попробуйте убрать RewriteBase. Правило мое возьмите (там проверка на наличие файла), а то у васrewrite 'ceramica/swf/home.swf' -> '/index.php?page=swf〈=home.swf' »
запросы на реальные файлы изменяет...internal redirect with /index.php [INTERNAL REDIRECT] »
непонятные внутренние редиректы (из-за передних слешей)

total_abandon
01-04-2010, 13:17
у меня "RewriteBase /", .htaccess лежит в /var/www a сам сайт в /var/www/ceramica. снял RewriteBase / - вообще стал не работать. .поставил настройки все как sham сказал, теперь сразу редиректит на 2 страницу и ненормально работает, то есть ссылки и тд не работают. вот логи.

10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98ec528/initial] (2) [perdir /var/www/] rewrite 'ceramica/' -> 'index.php?page=ceramica&lang='
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98ec528/initial] (2) [perdir /var/www/] trying to replace prefix /var/www/ with /
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98ec528/initial] (1) [perdir /var/www/] internal redirect with /index.php [INTERNAL REDIRECT]
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98f57b0/initial/redir#1] (1) [perdir /var/www/] pass through /var/www/ceramica/index.php
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98f4548/initial] (1) [perdir /var/www/] pass through /var/www/ceramica/img/titles/ceramica.gif
10.10.0.188 - - [01/Apr/2010:18:11:51 +0500] [192.168.55.230/sid#9747bd8][rid#98fa560/initial] (1) [perdir /var/www/] pass through /var/www/ceramica/swf/ef_ceramica.swf

Sham
01-04-2010, 13:54
имхо у вас дб RewriteBase /ceramica (если /var/www/ - document_root)
либо положите htaccess в ceramicaпоставил настройки все как sham сказал »настройки лучше делать по мануалу...

total_abandon
02-04-2010, 14:06
спасибо, стало работать, но не все, в ие-6,7, опера10, хроме - ок, а в мозилле че то не выводит флеши некоторые.
извините а что означает следующий лог?

192.168.155.32 - - [02/Apr/2010:14:55:45 +0500] [192.168.55.230/sid#8634bd8][rid#87d0508/initial] (2) [perdir /var/www/ceramica/] rewrite 'partners/rus' -> 'index.php?page=partners&lang=rus'
192.168.155.32 - - [02/Apr/2010:14:55:45 +0500] [192.168.55.230/sid#8634bd8][rid#87d0508/initial] (2) [perdir /var/www/ceramica/] trying to replace prefix /var/www/ceramica/ with /
192.168.155.32 - - [02/Apr/2010:14:55:45 +0500] [192.168.55.230/sid#8634bd8][rid#87d0508/initial] (1) [perdir /var/www/ceramica/] internal redirect with /index.php [INTERNAL REDIRECT]
192.168.155.32 - - [02/Apr/2010:14:55:45 +0500] [192.168.55.230/sid#8634bd8][rid#87d38f8/initial/redir#1] (1) [perdir /var/www/ceramica/] pass through /var/www/ceramica/index.php

kamaikin
03-04-2010, 08:09
Доброго дня! Помогите пожалуйста с проблемой.
на сайте есть URL типа: /image/small/ki436j9j.jpg
Его нужно преобразовать к урлу: cache/image/small/{Первые два символа$1}/$1.jpg
А если такого файла нет то перенаправить на скрипт image.php

Пытаюсь сделать так:

RewriteRule ^image/small/([a-z0-9_]+).jpg(/?)+$ cache/image/small/{Здесь споткнулся((((}/$1.jpg [L]
RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L]


Может быть сможете помочь?

droZel
04-04-2010, 08:00
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)/$ index.php?lang=$1&page=$2 [L]
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ http://%{HTTP_HOST}/$1/$2/ [R,N]
RewriteRule ^([A-Za-z]+)$ http://%{HTTP_HOST}/$1/about/ [R]
RewriteRule ^([A-Za-z]+)/$ index.php?lang=$1&page=about [L]
RewriteRule ^$ http://%{HTTP_HOST}/ru/about/ [N]

Почему после введения "site.ru/" он примеряет на них все правила попорядку?
Разве этот запрос удовлетворяет первому правилу?

127.0.0.1 - - [04/Apr/2010:12:19:45 +0700] [site/sid#87a6a8][rid#8d0d30/initial] (3) [perdir C:/Sites/home/site/www/] applying pattern '^([A-Za-z]+)/([A-Za-z]+)/$' to uri ''


Смысл - site/ заменять реальным site/ru/about/ и отправлять соответствующий запрос, site/ru заменять на site/ru/about/, ну и добавлять слеши где их нет в конце.
Заранее благодарен за помощь)

Sham
04-04-2010, 15:30
RewriteRule ^image/small/([a-z0-9_]+).jpg(/?)+$ cache/image/small/{Здесь споткнулся((((}/$1.jpg [L] »

RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg$ cache/image/small/$1/$2.jpg [L]

[N] »
зачем флаг N?

kamaikin
04-04-2010, 19:19
Цитата kamaikin:
RewriteRule ^image/small/([a-z0-9_]+).jpg(/?)+$ cache/image/small/{Здесь споткнулся((((}/$1.jpg [L] »
Код:
RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg$ cache/image/small/$1/$2.jpg [L]

Спасибо за первую часть решения, заработало вот так:
RewriteRule ^image/small/([a-z0-9_]{2})([a-z0-9_]+)\.jpg(/?)+$ cache/image/small/$1/$1$2.jpg
аостался второй вопрос если этого файла нет то должно выполняться перенаправление следующим образом
RewriteRule ^image/(small|big|original|pda)/([a-z0-9_]+).(jpg|png|gif)(/?)+$ images.php?size=$1&name=$2&ext=$3 [L]




© OSzone.net 2001-2012