ЧПУ в DLE

Grave
На сайте с 14.12.2009
Offline
81
2320

Доброго времени суток!

Имеется сайт на DLE 9.0. Возникла необходимость прикрутить сторонний скрипт, на том же домене.

Но появились трудности с ЧПУ от движка. К примеру, есть folder1/, в ней лежит index.php. При запросе site.com/folder1/ включается редирект (рерайт) от ДЛЕ и движок сообщает, что страница не найдена. Аналогично и на уровень ниже - site.com/folder1/folder2/. При прямом запросе - site.com/papka1/index.php все отлично работает. На ранней версии скрипта, достаточно было сунуть в папку .htaccess с одной строчкой "RewriteEngine off", и это правило распространялась на все вложенные папки.

.htaccess в корне сейчас выглядит следующим образом

Options +FollowSymlinks
RewriteEngine on

# Редиректы
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]

# Сам пост
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]

RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$2 [L]
RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$2&newsid=$3 [L]
RewriteRule ^([^.]+)/([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2 [L]

RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html(/?)+$ index.php?newsid=$2&news_page=$1 [L]
RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ engine/print.php?news_page=$1&newsid=$2 [L]
RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1 [L]

# За день
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2&day=$3 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&day=$3&cstart=$4 [L]
# За весь месяц
RewriteRule ^([0-9]{4})/([0-9]{2})(/?)+$ index.php?year=$1&month=$2 [L]
RewriteRule ^([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?year=$1&month=$2&cstart=$3 [L]
# Вывод за весь год
RewriteRule ^([0-9]{4})(/?)+$ index.php?year=$1 [L]
RewriteRule ^([0-9]{4})/page/([0-9]+)(/?)+$ index.php?year=$1&cstart=$2 [L]
# вывод отдельному тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
RewriteCond %{HTTP_USER_AGENT} !america [NC]
RewriteCond %{HTTP_USER_AGENT} !avant [NC]
RewriteCond %{HTTP_USER_AGENT} !iphone [NC]
RewriteCond %{HTTP_USER_AGENT} !google [NC]
RewriteCond %{HTTP_USER_AGENT} !Googlebot [NC]
RewriteCond %{HTTP_USER_AGENT} !StackRambler [NC]
RewriteCond %{HTTP_USER_AGENT} !Aport [NC]
RewriteCond %{HTTP_USER_AGENT} !Mail.Ru [NC]
RewriteCond %{HTTP_USER_AGENT} !WebAlta [NC]
RewriteCond %{HTTP_USER_AGENT} !MSNBot [NC]
RewriteCond %{HTTP_USER_AGENT} !Yandex [NC]
RewriteCond %{HTTP_USER_AGENT} !Teoma [NC]
RewriteCond %{HTTP_USER_AGENT} !download [NC]
RewriteCond %{HTTP_USER_AGENT} !windows-media-player [NC]
RewriteRule ^(.*)$ ссылко на вап-редирект [L,R=302]
# вывод всех последних новостей
RewriteRule ^lastnews/(/?)+$ index.php?do=lastnews [L]
RewriteRule ^lastnews/page/([0-9]+)(/?)+$ index.php?do=lastnews&cstart=$1 [L]
# вывод в виде каталога
RewriteRule ^catalog/([^/]*)(/?)+$ index.php?catalog=$1 [L]
RewriteRule ^catalog/([^/]*)/page/([0-9]+)(/?)+$ index.php?catalog=$1&cstart=$2 [L]
# вывод непрочитанных статей
RewriteRule ^newposts(/?)+$ index.php?subaction=newposts [L]
RewriteRule ^newposts/page/([0-9]+)(/?)+$ index.php?subaction=newposts&cstart=$1 [L]
# Статистические страницы
RewriteRule ^static/(.*).html(/?)+$ index.php?do=static&page=$1 [L]
# вывод избранных статей
RewriteRule ^favorites(/?)+$ index.php?do=favorites [L]
RewriteRule ^favorites/page/([0-9]+)(/?)+$ index.php?do=favorites&cstart=$1 [L]
RewriteRule ^rules.html$ index.php?do=rules [L]
RewriteRule ^statistics.html$ index.php?do=stats [L]
RewriteRule ^addnews.html$ index.php?do=addnews [L]
RewriteRule ^rss.xml$ engine/rss.php [L]
RewriteRule ^sitemap.xml$ uploads/sitemap.xml [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]
RewriteRule ^([^.]+)/?$ index.php?do=cat&category=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^<]+)/rss.xml$ engine/rss.php?do=cat&category=$1 [L]
RewriteRule ^page,([0-9]+),([^/]+).html$ index.php?do=static&page=$2&news_page=$1 [L]
RewriteRule ^print:([^/]+).html$ engine/print.php?do=static&page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+).html$ index.php?do=static&page=$1 [L]

Я пытался пошаманить и добавить своё правило, что-то типа

RewriteRule ^folder1/ folder1/index.php [L]

Но как я понял, такая строчка просто редиректит на folder1/index.php все, что лежит внутри folder1.

Хотелось бы как-то найти решение проблемы.

...
gormarket
На сайте с 29.12.2010
Offline
47
#1
Grave:
RewriteRule ^folder1/ folder1/index.php [L]
Но как я понял, такая строчка просто редиректит на folder1/index.php все, что лежит внутри folder1

А Вы сделайте так, чтоб правило не затрагивало то, что лежит внутри folder1 (используйте символ конца строки в регулярке)


RewriteRule ^folder1/?$ folder1/index.php [L]
Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
Grave
На сайте с 14.12.2009
Offline
81
#2
gormarket:


RewriteRule ^folder1/?$ folder1/index.php [L]

Благодарю! С этой папкой все заработало. Но оттуда, с разных страниц (folder1/example1(2,3).php) идут ссылки на кучу папок /another_folder/folder/folder14(разные цифры)/, в которых такие же индексные файлы, которые не желают отображаться.

Попробовал вот так:

RewriteRule ^another_folder/folder/?$ another_folder/index.php [L]

и так

RewriteRule ^another_folder/?$ another_folder/index.php [L]

Опять не выходит.🙅

gormarket
На сайте с 29.12.2010
Offline
47
#3

Тогда попробуйте такой прием:

условие - если запрашиваемый документ это папка

правило - реврайт на индексный файл в этой папке


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/?$ $1/index.php [L]
Grave
На сайте с 14.12.2009
Offline
81
#4
gormarket:
Тогда попробуйте такой прием:
условие - если запрашиваемый документ это папка
правило - реврайт на индексный файл в этой папке

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/?$ $1/index.php [L]

В чистом виде этот код конфликтует с правилами DLE.

Надо наверное как-то вот так: ?

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(./folder2/folder22/*)/?$ $/index.php [L]
vandamme
На сайте с 30.11.2008
Offline
675
#5

правила местами поменять не пробовали?

gormarket
На сайте с 29.12.2010
Offline
47
#6

Как я вижу у Вас сейчас нет редиректов в .htaccess, только реврайты.

А как Вы смотрите, если сделать 301 редирект для запросов папки без файла на индексный файл в этой папке ?

Убъете сразу двух зайцев - и проблема исчезнет и дублей страниц не будет (вместо "...folder/", "...folder" и "...folder/index.php" останется только страница с index.php)

Grave
На сайте с 14.12.2009
Offline
81
#7
vandamme:
правила местами поменять не пробовали?

Всмысле? Нельзя чтобы это правило охватывало все папки, иначе любая ссылка со слешем на конце станет нерабочая (категории на сайте например). Надо чтобы это затрагивало лишь отдельную папку и ниже вложенные. У DLЕ свои внутренности, он не просто индексный файл подсовывает.

Объясняю суть. К сайту прикручивается галерея. Есть страница выбора категории /categories/ и сами галеры по адресам вида /script/galleries/efefgaefa01(название генерится рандомно)/index.php

Проблема с рерайтом в категориях решилась этой строчкой:

RewriteRule ^categories/?$ categories/index.php [L]

С самими галерами не выходит. Пробовал вот так:

RewriteRule ^script/galleries/?$ /index.php [L]

Но это похоже охватывает только саму папку galleries, исключая вложенные в нее.

И мне кажется, что можно сделать отдельное правило конкретно для /script/galleries/*

Сам я не силен. Но выглядеть это должно как-то вот так наверное

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(./script/galleries/*)/?$ $/index.php [L]

Grave добавил 28-02-2011 в 13:37

gormarket:
Как я вижу у Вас сейчас нет редиректов в .htaccess, только реврайты.

А как Вы смотрите, если сделать 301 редирект для запросов папки без файла на индексный файл в этой папке ?

DLE потеряет свой функционал. Как и описывал постом выше. Вот это правило отвечает зе рерайт со слэшами внутри движка, как я понял.

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^.]+)/page/([0-9]+)(/?)+$ index.php?do=cat&category=$1&cstart=$2 [L]

301 редирект есть - для убиения www.

gormarket
На сайте с 29.12.2010
Offline
47
#8

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(script/galleries.*[^/])/?$ $1/index.php [L]

если запрашиваемый документ папка и если начинается на "script/galleries" и может быть заканчивается слешем, то реврайт на index.php в этой папке

gormarket добавил 28.02.2011 в 14:13

Извиняюсь, не получилось отредактировать: убрал последний символ в galleries, чтоб корректно обрабатывался адрес "script/galleries/" (со слешем в конце)


RewriteCond %
{REQUEST_FILENAME} -d
RewriteRule ^(script/gallerie.*[^/])/?$ $1/index.php [L]

если запрашиваемый документ папка и если начинается на "script/gallerie" и может быть заканчивается слешем, то реврайт на index.php в этой папке

gormarket добавил 28.02.2011 в 14:15


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(script/gallerie.*[^/])/?$ $1/index.php [L]
Grave
На сайте с 14.12.2009
Offline
81
#9
gormarket:
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(script/galleries.*[^/])/?$ $1/index.php [L]

Поставил этот код. Все заработало как надо. Спасибо!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий