Помогите с htaccess

S0
На сайте с 20.02.2011
Offline
1
776

Уважаемые форумчане, помогите разобраться с настройками htaccess. Перелопатил довольно много литературы, но так до конца и не разобрался в синтаксисе. Нужно решить следующие задачи:

1) Надо избавиться от дублей страниц в джумле. То есть существует много страниц вида:

/content/view/5/1/

/content/view/5/2/

/content/view/5/3/ и т.д. до бесконечности, хочу прописать в htaccess чтобы все эти страницы редиректились на /content/view/5/ через 301 редирект, но к сожалению не получается.

Пробовал такие варинаты:


RewriteRule ^content/view/([0-9]*)/([0-9]*)/$ /content/view/$1 [R=301]


RewriteRule ^(content/view/\d+/)\d+/$ /$1 [R=301,L]

ни тот ни другой не работают.

2) Ссылка из меню на главную страницу - www.site.com/component/option,com_frontpage/Itemid,1/ (ужас просто)

надо чтобы была просто www.site.com/. Пишу так:

RewriteRule ^component/option,com_frontpage/Itemid,1/$ / [R=301,L]

работает на половину, в результате ссылается на www.site.com:8080/

Получется если прописать так:

Redirect 301 /component/option,com_frontpage/Itemid,1/ http://www.moemgorod.ru/
но это ппц решение в лоб)

Помогите советом, заранее спасибо.

S
На сайте с 28.10.2005
Offline
319
#1

А так?

RewriteRule ^content/view/([0-9]*)/([0-9]*)/$ http://site.ru/content/view/$1 [R=301,L]

MalikS
На сайте с 07.11.2010
Offline
28
#2

semenov Вам подсказал правильный вариант, но не забывайте про конечный слеш.

RewriteRule ^content/view/([0-9]*)/([0-9]*)/?$ http://site.ru/content/view/$1/ [R=301,L]

Тогда будет редирект с

/content/view/5/2/

и

/content/view/5/2

строго на

/content/view/5/ (со слешем)

ТРИФОРС (http://trifors.ru) - товары для бокса и единоборств
D
На сайте с 28.06.2008
Offline
1114
#3

Я так понимаю Джумла 1,0,15 ? :) ТОже озадачивался, вот мое решение:

RewriteRule ^content/view/(.*)/1(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/3(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/4(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/5(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/6(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/7(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/8(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/9(.*)$ 404.html [L]
RewriteRule ^content/view/(.*)/0(.*)$ 404.html [L]
RewriteRule ^content/category/1(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/3(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/4(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/5(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/6(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/7(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/8(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/9(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/0(.*)/(.*)/(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/1(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/3(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/4(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/5(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/6(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/7(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/8(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/9(.*)$ 404.html [L]
RewriteRule ^content/category/2/(.*)/0(.*)$ 404.html [L]
RewriteRule ^content/view/([0-9]+)/$ /content/view/$1/2 [R=301,L]
RewriteRule ^content/view/([0-9]+)$ /content/view/$1/2 [R=301,L]
S0
На сайте с 20.02.2011
Offline
1
#4

semenov, да, так работает, но с ограничениями, описанными MalikS. Спасибо обоим за помощь! В соседней теме также предложили работающее решение.

Dram, да джумла 1.0. Немного не понял зачем вы делаете редирект на 404 страницу?

Осталось сделать редирект с

site.ru/index.php?option=com_frontpage&Itemid=1

на главную

Такой вариант почему то не работает

RewriteRule ^index.php?option=com_frontpage&Itemid=([0-9]+)$ http://www.site.ru/ [R=301,L]

подскажите что не так и как исправить теперь?

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

strat0caster, здесь Вы не правы, пытаясь анализировать строку запроса (то что идет в адресе после ?) в правиле RewriteRule

RewriteRule работает только с той частью адреса, которая до "?"

Да еще и базовая часть в начале адреса отсекается (обычно "http:site.ru/" для htaccess в корне сайта, и "http:site.ru/folder/" для htaccess в каталоге первого уровня и т.д.)

Строку запроса надо анализировать в RewriteCond с помошью переменной %{QUERY_STRING}


RewriteCond %{QUERY_STRING} ^option=com_frontpage&Itemid=[0-9]+$
RewriteRule ^index.php$ http://www.site.ru/? [R=301,L]

А еще лучше вместо http://www.site.ru/ использовать http://%{HTTP_HOST}/

Упс!!!!!!

Забыл "?" добавить в RewriteRule ^index.php$ http://www.site.ru/? [R=301,L] чтоб строку запроса удалить при редиректе

Так что окончательный вариант такой


RewriteCond %{QUERY_STRING} ^option=com_frontpage&Itemid=[0-9]+$
RewriteRule ^index.php$ http://%{HTTP_HOST}/? [R=301,L]
Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
S0
На сайте с 20.02.2011
Offline
1
#6

gormarket, да Вы просто гуру htaccess! =)

Спасибо большое! Смогу проверить правильность варианта только в понедельник, хотя не сомневаюсь что все будет работать!)

AD
На сайте с 13.07.2010
Offline
9
#7

Я обычно здесь проверяю правила редиректа, очень удобно:

http://martinmelin.se/rewrite-rule-tester/

S0
На сайте с 20.02.2011
Offline
1
#8

gormarket, все работает, спасибо еще раз!

a.dorofeev, полезный инструмент, только не понял в каком формате там URL вводить, подскажите?

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