Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Вопрос по .htaccess

#1 EugeneM

EugeneM
  • Пользователь
  • 20 сообщений
  • Репутация: 0
0

Отправлено 26 Ноябрь 2009 - 01:33

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

Вопрос такой.
В .htaccess описаны правила:
RewriteEngine On
RewriteBase /f1/
RewriteRule ^article\/([_A-Za-z0-9]+)\/([_A-Za-z0-9]+)\/([_A-Za-z0-9]+).html?$ index.php?mode=article&section=$1&group=$2&article=$3
RewriteRule ^article\/([_A-Za-z0-9]+)\/([_A-Za-z0-9]+)\/?$ index.php?mode=article&section=$1&group=$2
RewriteRule ^article\/([_A-Za-z0-9]+)\/?$ index.php?mode=article&section=$1
Если при этом еще и в заголовке страницы указать base href, то почти всё работает как надо. За исключением почему-то ссылок вида <a href="#1"> (использую их, в частности, в Coda Slider), которые преобразуются почему-то в %20%3E%3Cmeta%20http-equiv=#1...
Если base href убрать, то эти ссылки остаются такими как есть (#1), но все css, картинки...
Прописывать /img/sample.png вместо img/sample.png тоже не выход - оно должно одинаково работать и с, например, 10.xxx.xxx.xxx/mysite и mysite.host.ru (т.е. путь от корня может быть разным).
Можно, конечно, с помощью php во все страницы подставлять абсолютный путь до всех файлов (т.е. использовать конструкции вида $sitebase."/img/sample.png"), но тогда и css нужно будет через php формировать.... через одно место, мягко говоря, получится... Есть может какое-то более правильное решение?

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 26 Ноябрь 2009 - 12:24

EugeneM,

Можно, конечно, с помощью php во все страницы подставлять абсолютный путь до всех файлов (т.е. использовать конструкции вида $sitebase."/img/sample.png"), но тогда и css нужно будет через php формировать.... через одно место, мягко говоря, получится... Есть может какое-то более правильное решение?

Вы не правы насчёт CSS. Абсолютный путь вам придётся использовать только в подключаемых файлах + пути картинок. CSS тут никоим образом не затрагивается. Всегда все файлы задаются относительно его расположения, а не относительно страницы, куда этот файл вставляется.

Почему ссылки преобразуются честно сказать не могу. Вроде как через сервер страница проходить не должна. Попробовал подобную структуру у себя, всё работает.
Вообще у вас дурацкие регулярные выражения. ? - означает 0 или 1 попаданий, / - не надо экранировать
RewriteRule ^article/([_A-Za-z0-9]+)/([_A-Za-z0-9]+)/([_A-Za-z0-9]+).html$ index.php?mode=article&section=$1&group=$2&article=$3
RewriteRule ^article/([_A-Za-z0-9]+)/([_A-Za-z0-9]+)/?$ index.php?mode=article&section=$1&group=$2
RewriteRule ^article/([_A-Za-z0-9]+)/?$ index.php?mode=article&section=$1

И зачем вы вообще используете RewriteBase /f1/? Вы хотите чтобы вместо отброшенного при преобразовании локального пути до каталога, вам возвращалось содержимое из:
/f1/index.php....

У меня все якоря работают даже с base.
  • 0

#3 EugeneM

EugeneM
    Topic Starter
  • Пользователь
  • 20 сообщений
  • Репутация: 0

Отправлено 27 Ноябрь 2009 - 02:17

ZiTosS
Благодаря

У меня все якоря работают даже с base.

стал искать причину. Нашел. Тупейшая ошибка - забыл закрывающую кавычку в base. Т.е. у меня было <base href="http://localhost/mysite/>. зря панику поднял, в общем :blink:

Вообще у вас дурацкие регулярные выражения

Возможно, Вы и правы. И экранирование слэша вовсе не обязательно.
Но вот ? после html мне нужен, т.к. хотелось бы, чтобы
/article/section/group/sample.html и
/article/section/group/sample.htm вели в одно и то же место. А без знака вопроса второй путь вроде бы как и не будет соответствовать правилу!
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 27 Ноябрь 2009 - 16:37

EugeneM, А ну да, извиняюсь не подумал :blink:
Вот по поводу подобных регулярок:
RewriteRule ^article/...$ index.php?mode=article...
Я бы предпочёл
RewriteRule ^([A-Za-z]+)/...$ index.php?mode=$1...
А PHP-скрипт изначально получая $_GET['mode'] определяется с загружаемыми данными с помощью switch ... case. Подобная структура уменьшит количество реврайтов, да и удобнее как мне кажется. Не надо каждый раз править .htaccess, если вы, к примеру, добавили ещё какую-то ветвь исполнения
  • 0


Оформление форума – IPBSkins.ru