Консультация № 170511
17.07.2009, 13:46
0.00 руб.
0 7 0
Здравствуйте!


Файл .htaccess на одном из сайтов выглядит так:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /

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

RewriteRule ^(ru|en)$ /index.php?l=$1 [L]
RewriteRule ^([-A-Za-z0-9]+)$ /index.php?article=$1 [L]
RewriteRule ^(ru|en)/([-A-Za-z0-9]+)$ /index.php?l=$1&article=$2 [L]


По отдельности параметры "язык" и "статья" передаются нормально.
Есл вместе - перестают показываться стили и картинки на странице, т.к. прописаны они относительно и их адреса начинают выглядеть так: http://site.ua/en/img/picture.png , а должны так: http://site.ua/img/picture.png

Как бороться?
Медод перепрописывания относительных путей в абсолютные не предлагать.

Обсуждение

Неизвестный
17.07.2009, 14:05
общий
Прим Палвер:
Есть два варианта решения проблемы:
1 (Частный) Перед директивами RewriteRule добавить
RewriteCond $1 !^(img*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Т.е. пишите сразу после RewriteBase

2 (Общий) Прочитать мануал по регулярным выражением и mod_rewrite (ручаюсь моего ответа вы ждали дольше чем сами бы разобрались + получили бы новые знания )
Неизвестный
17.07.2009, 14:39
общий
Я RewriteCond ещё не до конца вкурил.

Можно разжевать частный пример и выложить его вкупе с моим кодом?
Потому как изменений - НУЛЬ.
Неизвестный
17.07.2009, 15:00
общий
Короче, сделал добавочное в конце:

RewriteRule ^(ru|en)/(.*)$ /$2 [L]

А ваш пример не работает. Хотя, спасибо за наводку на мысль.
Как я понял, когда с индексного файла лезут за рисунком или файлом стилей, тоже проходят через .htaccess?
Неизвестный
17.07.2009, 15:02
общий
Не... RewriteCond здесь не к месту, т.к. проблема не в обработке адресов, а в их построении. В Вашем случае уместнее будет использовать <base href="...">
Неизвестный
17.07.2009, 16:44
общий
Straight, в смысле?

Вместо <a href="..."> писать <base href="..."> ???

А как, чтобы не лезть в код других файлов?
Неизвестный
17.07.2009, 17:03
общий
Прим Палвер:
Нет, это в блоке HEAD Вашего HTML-файла нужно написать контрукцию:
<base href="http://www.mycoolsite.com/">
Только сайт свой поставьте.
Это база для относительных ссылок. При наличии этой конструкции все относительные ссылки будут считаться от этой базы, а не от текущего адреса.
Неизвестный
17.07.2009, 20:25
общий
Straight, вот за это спасибо!
Форма ответа